// answerExam JS Document
define(function(require){
	// 加载js
    var rs_js = require('../common/app');
    var rs_data = require('../common/testData');
    var rs_cpt = require('../common/cptTestCache');
    var rs_setTest = require('../common/yingSoftSetTest');
    var swiper = require('../libs/swiper.min');
    // 定义全局变量
    var easyErrorData = easyErrorData;
    // 页面初始化
    onloadData();
    /********************************************************************************
     *根据TestData分解的线性数据，解析展示在页面
     ********************************************************************************/
    function onloadData() {
        if (!!document.all) {
            $(window).resize(_winResize());
        } else {
            $(window).resize(_winResize());
        }
        function _winResize() {
            //dragContent层高度等于当前高度
            $('#wrapper').css('height',window.innerHeight);
        }
        _winResize();
        // getUserSetting();//获取软件设置云数据
        G_UserAction.loadObject();
        G_AllTest = new TestData();
        TestUI(G_AllTest);
        var title = $('.ansexam .anstitle p').html();
        if(title.length >= 11){
            $('.ansexam .anstitle p').html(title.substring(0,11)+'...');
        }else{
            $('.ansexam .anstitle p').html(title);
        }
    }
    window.onbeforeunload = function (event) {
        G_AllTest.addReplyJson();
        //(event || window.event).returnValue = "确定退出吗";
    };
    init();
    /********************************************************************************
     *页面初始化
     ********************************************************************************/
    function init() {
        var flipsnap;
        var num = '0';
        var scrollDiv = '';
        var scrollDiv_temp = 'div_';
        var myScroll;
        var HtmlTemplate = $('.answerContBox').html();
        for(i=0;i<3;i++){
            var slideDiv = $('<div class="swiper-slide></div>');
            num = i;
            // scrollDiv = scrollDiv_temp + num;
            var slideDiv = $('<div class="swiper-slide" id="'+scrollDiv+'"></div>');
            var slideDivCont = $('<div class="swiper_cont"></div>');
            // slideDiv.css({'height':_height});
            slideDiv.html(slideDivCont);
            slideDivCont.html(HtmlTemplate);
            $('#innerdiv').append(slideDiv);
            slideDiv.find('.anstitle span em').html(i+1);
            myscroll.refresh();
        }
        var mySwiper = new Swiper('.swiper-container', {
            // autoplay: 5000,//可选选项，自动滑动
            onSlideNextStart:function(swiper){
                // myscroll.scrollToElement('.swiper_cont',1);
            	console.log('向右');
            },
            onSlidePrevStart:function(swiper){
            	console.log('向左');
            }
        });
    }
    
    /********************************************************************************
     函数名：TestUI
     功能：接收试题各部分数据展示在页面上
     输入参数: allTest 函数TestData的对象
     *******************************************************************************/
    function TestUI(allTest){
        var _IsShowTopic = true;    //是否显示题目
        var _IsShowItems = true;    //是否显示选项
        var _IsShowExplain = true;  //是否显示解析
        var _IsShowUserAnswer = true;   //是否显示用户答题信息
        var _IsShowRightAnswer = true;  //是否显示正确答案
        var _IsDisabled = true;       //是否可以作答
        var _IsShowRightAndWrong = true;    //显示用户所选答案是否正确
        var _IsShowDiscussion = true;   //是否显示讨论信息

        var _IsHandle = 0;  //标记是否进行了试题的相关操作
        var _selected = 0;  //从模拟考场进入答题界面，用户选择答案后，标记该值为1，提交批阅后，修改状态为0；用于控制上下一题时选项的选中状态
        var _viewCount = 0; //简答题、填空题已做过/浏览的试题数量
        var _replyStartTime = '';   //答题开始时间
        var _fromUrl = '';
        var _fontColor = 'defaultItem';
        var _htmlTemplate = ''; //保存的html模板
        var _title = '';    //界面上展示的标题
        var doTest = false; //标记点击了答题按钮进行操作 
        var _appEName = G_Cookie.getAppEName();
        // 夜间模式
        if (G_Cookie.getNightMode()) {
            _fontColor = 'nightItem';
        }
        var _curPage = G_Prg.getQueryString('page');
        if (!_curPage) {
            _curPage = 1;
        }
        var _curTestNO = '';    //当前试题编号
        var _replay = G_Prg.getQueryString('replay');
        var _testJson = '';

        var _gAllTest = allTest; //TestData 类对象
        var allTestID = _gAllTest.getCurAllTestID();//获取用户答题明细info包中最后答的试题AllTestID
        if (_replay === '1') {
            var arrAllTest = _gAllTest.getArrAllTest();
            //还原现场：如果是批阅或者背题模式下，恢复现场只保留之前操作到的当前试题，之前的操作清空
            if (arrAllTest[0].state === 'marked' || arrAllTest[0].state === 'recite') {
                for (var i = 0; i < arrAllTest.length; i++) {
                    arrAllTest[i].userReply = '';
                    arrAllTest[i].isRight = false;
                    arrAllTest[i].lastState = '';
                    arrAllTest[i].state = '';
                }
                _gAllTest.clearAction();
                _gAllTest.setState('uncommited', 1);
            }
            _testJson = G_Storage.getLocalStorageValue(G_Cookie.getUserID() + '_' + _appEName + '_testJson');
            _curTestNO = _testJson.curTestNO;   //当前试题编号
            _fromUrl = _testJson.url;
        } else {
            var allTestID_param = G_Prg.getQueryString('allTestID');    //当前试题编号
            if (allTestID_param) {//如果存在参数allTestID,则优先取参数的allTestID
                allTestID = allTestID_param;
            }
            if (allTestID) {
                allTestID = parseInt(allTestID);
            }
            _curTestNO = _gAllTest.getTestNO(allTestID);
            _fromUrl = G_Prg.getQueryString('fromUrl');
        }
        var _curTestIndex = parseInt(_curTestNO) - 1;       //当前试题索引
        if (_curTestNO !== null) {
            _gAllTest.move(_curTestIndex);  //设置当前试题编号
        }
        var _gFlipsnap = {};    //滑动控件
        var _addNote = [];
        if (_fromUrl === 'mockExam') {
            _setState('mock');
            _showConfigJsonInfos();
            $('#carAnswered1').css('display','block');
            $('#carAnswered2').css('display','block');
        } else {
            _setState('uncommited');
        }
        var _arrTypeExplain = _gAllTest.setExplain();
        _init(); //初始化试题
        _initFlipsnap(_gFlipsnap);  //初始化后滑动

        var dragIndexByTestIndex = _getDragIndexByTestIndex();//计算应该显示的索引，如果从错题、笔记、收藏进来会跳到试题对应的滑动层
        if (_gFlipsnap.currentPoint !== dragIndexByTestIndex) {
            _gFlipsnap.moveToPoint(dragIndexByTestIndex, 0);
            _setFavTestInfos(); //刷新底部收藏
            _refreshNoteIcon();
        }
        _setCss();
        //正则替换，实现笔记换行
        var _regerBr = new RegExp('<br>', 'gm');
        var _regerN = new RegExp('\n', 'gm');

        var _cardHtml = $('.feedbackDiv');

        /********************************************************************************
         函数名：_init
         功能：初始化试题
         输入参数:dragFlag 滑动标识(0：初始化，1：上一题，2：下一题)
         *******************************************************************************/
        function _init(dragFlag) {
            _replyStartTime = new Date();   //答题开始时间
            var firstLoad = false;
            //是不是第一次绑定
            if (dragFlag !== 'card') {
                firstLoad = dragFlag ? false : true;
                dragFlag = dragFlag || 0;
            }
            var curIndex = _gAllTest.getCurIndex();
            var allTestCount = _gAllTest.getTestCount();//当前试题总数

            var dragCount = allTestCount < 3 ? allTestCount : 3; //滑动层个数，如果试题数小于3题，则出现小于3题的滑动层
            if (firstLoad) {
                _moveTestTemplet(allTestCount); //在绑定之前把模板复制到目标DIV
            }
            var startIndex = 0;
            if (curIndex === 0 || dragCount < 3) {
                startIndex = 0;
            } else if (curIndex === allTestCount - 1) {
                startIndex = curIndex - 2;
            } else {
                startIndex = curIndex - 1;
            }
            //curTest使用传参的方式，解决滑动时试题会闪屏的情况
            for (var i = 0; i < dragCount; i++) {
                var curTest = _gAllTest.getTest((startIndex + i));
                _gAllTest.getTestDataInfo(curTest,i,_setUserExplain,_setStatisticsData,_showDiscussInfo);
                _showCurTest(curTest, i);
                _setClickEvent(curTest, i); //设置页面单击事件
                _setTestEvent(curTest, i); //设置选项事件
                _showKJCYEnterBtn(curTest, i);  //会计从业押题版、保过版的模拟考场最后一题设置进入下一套试卷按钮显示
                _hideBtn(curTest, i);
            }
            if (dragFlag === 'card') {  //从题卡点击题卡号进入指定试题页面
                //特殊情况跳转
                if (curIndex === 0) {
                    _gFlipsnap.moveToPoint(0, 0);   //滑动到指定的层
                } else if (curIndex === allTestCount - 1) {
                    _gFlipsnap.moveToPoint(2, 0);   //滑动到指定的层
                } else {
                    _gFlipsnap.moveToPoint(1, 0);   //滑动到指定的层
                }
            }
            _setFavTestInfos();//刷新收藏
            _refreshNoteIcon();
            if (firstLoad) {
                if (_fromUrl === 'mockExam') {
                    _showConfigJsonInfos();
                    if (_gAllTest.getState(curTest.testNO - 1) !== 'marked') {
                        $('#marking').css('display','block');
                    }
                    $('#userScoreBtn').css('display','none');
                }

                if (_fromUrl !== 'mockExam' && _gAllTest.getState(curTest.testNO - 1) !== 'recite') {//章节练习，显示"成绩"按钮，隐藏批阅按钮
                    $('#marking').css('display','none');
                    $('#retake').css('display','none');
                    $('#userScoreBtn').css('display','block');

                    if (_fromUrl === 'myMessage') {
                        // $('#userScoreBtn').css('display','none');
                    }//陶云添加从消息页面进来的试题不显示成绩按钮20160505

                    //如之前有答题,则先显示成绩页面
                    //查找试题、笔记、收藏、错题等列表也进入做题页面，点击“查看答题情况”按钮，不在显示成绩页面
                    if (_gAllTest.getArrUserTest().length >= 1 && _gAllTest.calculateScores().doneNum >= 1 && _fromUrl === 'chapterThree') {
                        _showScore();
                    }
                }
            }
        }

        /********************************************************************************
         函数名：_showCurTest
         功能：显示试题
         输入参数: curTeset 当前试题;
         *******************************************************************************/
        function _showCurTest(curTest, dragIndex) {
            var curTestIndex = curTest.testNO - 1;
            if (_gAllTest.getLastAction(curTestIndex) && (curTest.testType === 'JDTEST' || curTest.testType === 'TKTEST') && _gAllTest.getAction(curTestIndex) === 'addNote') {//此判断控制简答题在查看答案后，再添加笔记时能保持之前查看答案的状态
                _setState(_gAllTest.getState(curTestIndex), _gAllTest.getLastAction(curTestIndex));
            } else {
                _setState(_gAllTest.getState(curTestIndex), _gAllTest.getAction(curTestIndex));
            }
            if (G_Cookie.getUserID() && (_gAllTest.getState(curTest.testNO - 1) === 'commited' || _gAllTest.getState(curTest.testNO - 1) === 'unable' || _gAllTest.getState(curTest.testNO - 1) === 'marked')) {
                _gAllTest.getTestDataInfo(curTest, dragIndex, _setUserExplain, _setStatisticsData, _showDiscussInfo, _showKnowledgePoint, _showUnable);
            } else {
                _showDiscussInfo(0, curTest, dragIndex);
            }
            var title = $('.answerTemp .anstitle p'); //页面头部显示章节名称
            var simulated = G_Prg.getQueryString('simulated');
            if (_replay === '1') {
                if(_testJson.title.length >= 11){
                    title.html(_testJson.title.substring(0,11)+'...');
                }else{
                    title.html(_testJson.title);
                }

                _title = _testJson.title;
            } else {
                switch (_fromUrl) {
                    default:
                        title.html(G_Prg.getQueryString('cptName', true));
                        _title = G_Prg.getQueryString('cptName', true);
                        break;
                    case 'searchExam':
                        var type = G_Prg.getQueryString('type');
                        switch (type) {
                            case 'userError':
                                title.html('错题重做');
                                _title = '错题重做';
                                break;
                            case 'findTest':
                                title.html('查找试题');
                                _title = '查找试题';
                                break;
                            case 'userFav':
                                title.html('我的收藏');
                                _title = '我的收藏';
                                break;
                            case 'userNote':
                                title.html('我的笔记');
                                _title = '我的笔记';
                                break;
                            case 'errorRank':
                                title.html('错题排行榜');
                                _title = '错题排行榜';
                                break;
                            case 'favRank':
                                title.html('收藏排行榜');
                                _title = '收藏排行榜';
                                break;
                            case 'noteRank':
                                title.html('大家的笔记');
                                _title = '大家的笔记';
                                break;
                        }
                        break;
                    case 'yhyc':
                        title.html('易混易错');
                        _title = '易混易错';
                        break;
                    case 'mockExam':
                        if (simulated === '0') {
                            title.html('模拟考场');
                            _title = '模拟考场';
                        } else if (simulated === '1') {
                            if (_gAllTest.getKJCYData() === 0) {
                                var configJson = JSON.parse(_gAllTest.getConfigJson());
                                title.html(configJson.ConfigTitle);
                                _title = configJson.ConfigTitle;
                            } else {
                                title.html(_gAllTest.getKJCYData().title);
                            }
                        }
                        break;
                    case 'video_play':
                        title.html('易混易错');
                        _title = '易混易错';
                        break;
                    case 'comb':
                        title.html('知识点试题');
                        break;
                    case 'Five':
                        if((decodeURI(_GetQueryString('chapterName')) + '-相关练习').length >= 11){
                            title.html((decodeURI(_GetQueryString('chapterName')) + '-相关练习').substring(0,11)+'...');
                        }else{
                            title.html(decodeURI(_GetQueryString('chapterName')) + '-相关练习')
                        }
                        // title.html(decodeURI(GetQueryString('chapterName')) + '-相关练习');
                        break;
                    case 'myMessage':
                        title.html('新增讨论');
                        break;
                    case 'doExam-index':
                        title.html('随机练习');
                        _title = '随机练习';
                }
            }
            _gAllTest.setTitle(_title);
            if (curTest === '' || curTest === undefined) {
                return;
            }
            var testType = curTest.testType; //根据题型调用对应的展示数据的函数
            _hideTestTemplet(dragIndex);
            switch (testType) {
                case 'A3TEST':
                    _showA3Test(curTest, dragIndex);
                    break;
                case 'ATEST':
                    _showATest(curTest, dragIndex);
                    break;
                case 'BTEST':
                    _showBTest(curTest, dragIndex);
                    break;
                case 'XTEST':
                    _showXTest(curTest, dragIndex);
                    break;
                case 'PDTEST':
                    _showPDTest(curTest, dragIndex);
                    break;
                case 'JDTEST':
                    _showJDTest(curTest, dragIndex);
                    break;
                case 'TKTEST':
                    _showTKTest(curTest, dragIndex);
                    break;
                default:
                    G_Prg.throw('程序运行错误，TestUI._showCurTest：testType = "' + testType + '"，无法解析题型');
                    break;
            }
            if (_appEName === 'ZY_HS' || _appEName === 'ZY_LC' || _appEName === 'ZY_LC_ZL' || _appEName === 'ZY_ZYI' || _appEName === 'ZY_ZYI_ZL' || _appEName === 'ZY_ZXY' || _appEName === 'ZY_ZXY_ZL') {
                _showQuestAndVideoBtn(curTest, dragIndex);
            }
            _setClickEvent(curTest, dragIndex); //设置页面单击事件
            if (_fromUrl === 'myMessage') {
                _showDiscussBtn(curTest, 0, dragIndex); //设置讨论内容的显示
            }
            var title = $('.answerTemp .anstitle p');
            if(title.length >= 11){
                title.html(title.substring(0,11)+'...');
            }else{
                title.html(title);
            }
        }
        /********************************************************************************
         函数名：_hideTestTemplet
         功能：加载试题之前，将所有试题模板状态设置为隐藏
         *******************************************************************************/
        function _hideTestTemplet(dragIndex) {
            $('.danfmbox_'+dragIndex).hide();
            $('.duofmbox_'+dragIndex).hide();
            $('.panfmbox_'+dragIndex).hide();
            $('.janfmbox_'+dragIndex).hide();
            // $('#radio_exam_' + dragIndex).hide();
            // $('#checkbox_exam_' + dragIndex).hide();
            // $('#pd_exam_' + dragIndex).hide();
            // $('#jd_exam_' + dragIndex).hide();
            // $('#tk_exam_' + dragIndex).hide();
            // $('#A3_checkbox_exam_' + dragIndex).hide();
            // $('#A3_radio_exam_' + dragIndex).hide();
            // $('#B_checkbox_exam_' + dragIndex).hide();
            // $('#B_radio_exam_' + dragIndex).hide();
            // $('#tabMenuList' + '_' + dragIndex).hide();
            // $('#test_result' + '_' + dragIndex).hide();
            // $('#discuss_list' + '_' + dragIndex).hide();
            // $('#discuss_add' + '_' + dragIndex).hide();
            // $('#discuss_more' + '_' + dragIndex).hide();
        }

        /********************************************************************************
         函数名：_hideBtn
         功能：模拟考场隐藏‘不会’按钮
         输入参数：dragIndex 滑动层索引
         返回值: 无
         创建信息：黎萍（2016-07-14）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _hideBtn(curTest, dragIndex) {
            var isShow = '';
            if (_fromUrl === 'mockExam') {
                isShow = 'none';
            } else {
                if (_gAllTest.getState(curTest.testNO - 1) === 'commited') {
                    isShow = 'none';
                } else {
                    isShow = 'block';
                    if (_gAllTest.getState(curTest.testNO - 1) === 'unable') {//点击过了，改变‘不会’图标
                        $('#unableBtn_' + dragIndex).css('background-image','url(/images/unable2.png)');
                        $('#unableBtn_tk_' + dragIndex).css('background-image','url(/images/unable2.png)');
                        $('#unableBtn_jd_' + dragIndex).css('background-image','url(/images/unable2.png)');
                    } else {
                        $('#unableBtn_' + dragIndex).css('background-image','url(/images/unable.png)');
                        $('#unableBtn_tk_' + dragIndex).css('background-image','url(/images/unable.png)');
                        $('#unableBtn_jd_' + dragIndex).css('background-image','url(/images/unable.png)');
                    }
                }
            }

            $('#unableBtn_' + dragIndex).css('display',isShow);
            if (curTest.testType === 'JDTEST' || curTest.testType === 'TKTEST') {
                $('#unableBtn_' + dragIndex).css('display','none');
            }
            $('#unableBtn_tk_' + dragIndex).css('display',isShow);
            $('#unableBtn_jd_' + dragIndex).css('display',isShow);
        }

        /********************************************************************************
         函数名：_setState
         功能：设置操作试题的状态
         输入参数：state 操作试题的状态；action 操作试题的动作
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setState(state, action) {
            switch (state) {
                case 'uncommited'://未提交状态
                    _IsShowTopic = true;
                    _IsShowItems = true;
                    _IsDisabled = true;
                    _IsShowExplain = false;
                    _IsShowRightAnswer = false;
                    _IsShowUserAnswer = false;
                    _IsShowRightAndWrong = false;
                    _IsShowDiscussion = false;
                    break;
                case 'commited'://已提交
                    _IsShowTopic = true;
                    _IsShowItems = true;
                    _IsDisabled = true;
                    _IsShowExplain = true;
                    _IsShowRightAnswer = false;
                    _IsShowUserAnswer = false;
                    _IsShowRightAndWrong = true;
                    _IsShowDiscussion = true;
                    break;
                case 'recite'://背题状态
                    _IsShowTopic = true;
                    _IsShowItems = false;
                    _IsDisabled = false;
                    _IsShowExplain = false;
                    _IsShowRightAnswer = false;
                    _IsShowUserAnswer = false;
                    _IsShowRightAndWrong = false;
                    _IsShowDiscussion = false;
                    break;
                case 'mock':    //模拟考场
                    _IsShowTopic = true;
                    _IsShowItems = true;
                    _IsDisabled = true;
                    _IsShowExplain = false;
                    _IsShowRightAnswer = false;
                    _IsShowUserAnswer = true;
                    _IsShowRightAndWrong = false;
                    _IsShowDiscussion = false;
                    break;
                case 'marked'://批阅状态
                    _IsShowTopic = true;
                    _IsShowItems = true;
                    _IsDisabled = false;
                    _IsShowExplain = true;
                    _IsShowRightAnswer = true;
                    _IsShowUserAnswer = true;
                    _IsShowRightAndWrong = true;
                    _IsShowDiscussion = true;
                    break;
                case 'unable'://标记为：不会
                    _IsShowTopic = true;
                    _IsShowItems = true;
                    _IsDisabled = true;
                    _IsShowExplain = true;
                    _IsShowRightAnswer = true;
                    _IsShowUserAnswer = false;
                    _IsShowRightAndWrong = false;
                    _IsShowDiscussion = true;
                    break;
            }
            switch (action) {
                case 'reciteWithAnswer':
                    _IsShowRightAnswer = true;
                    _IsShowExplain = true;
                    break;
                case 'reciteNoAnswer':
                    _IsShowRightAnswer = false;
                    _IsShowExplain = false;
                    _IsShowUserAnswer = true;
                    break;
            }
        }

        /********************************************************************************
         函数名：_setID
         功能：获取试题信息所在html标签的id，用来控制对应的事件信息
         输入参数:无
         返回值：idArr 存储试题信息层所在id的伪哈希表
         创建信息：黎萍（2014-08-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setID(curTest) {
            var idArr = new Object();   //存储试题信息层所在id的伪哈希表
            if (curTest === '' || curTest === undefined) {
                return;
            }
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            switch (testType) {
                case 'ATEST':
                    //以下，题干信息ID
                    idArr['testTitle'] = 'radio_testTitle_';
                    idArr['testPoint'] = 'radio_testPoint_';
                    //题干信息结束
                    idArr['itemUiID'] = 'radio_Items_'
                    idArr['itemID'] = 'radio_items_';
                    idArr['itemNameID'] = 'radio_';
                    idArr['itemTextID'] = 'radio_itemText_';
                    break;
                case 'XTEST':
                    //以下，题干信息ID
                    idArr['testTitle'] = 'checkbox_testTitle_';
                    idArr['testPoint'] = 'checkbox_testPoint_';
                    //题干信息结束
                    idArr['itemUiID'] = 'checkbox_Items_'
                    idArr['itemID'] = 'checkbox_items_';
                    idArr['itemNameID'] = 'checkbox_';
                    idArr['itemTextID'] = 'checkbox_itemText_';
                    idArr['buttonID'] = 'checkbox_btn';
                    break;
                case 'A3TEST':
                    if (subTestType === '不定项' || subTestType === '多项') {
                        //以下，题干信息ID
                        idArr['frontTitle'] = 'A3_checkbox_testTitle_';//主标题
                        idArr['testTitle'] = 'A3_checkbox_a3test_';//小标题
                        idArr['testPoint'] = 'A3_checkbox_testPoint_';
                        //题干结束
                        idArr['itemUiID'] = 'A3_checkbox_Items_'
                        idArr['itemID'] = 'A3_checkbox_items_';
                        idArr['itemNameID'] = 'A3_checkbox_';
                        idArr['itemTextID'] = 'A3_checkbox_itemText_';
                        idArr['buttonID'] = 'A3_checkbox_btn';
                    } else if (subTestType === '单项') {
                        //以下，题干信息ID
                        idArr['frontTitle'] = 'A3_radio_testTitle_';//主标题
                        idArr['testTitle'] = 'A3_radio_a3test_';//小标题
                        idArr['testPoint'] = 'A3_radio_testPoint_';
                        //题干结束
                        idArr['itemUiID'] = 'A3_radio_Items_'
                        idArr['itemID'] = 'A3_radio_items_';
                        idArr['itemNameID'] = 'A3_radio_';
                        idArr['itemTextID'] = 'A3_radio_itemText_';
                    } else {
                        G_Prg.throw('程序运行错误，TestUI._setID： A3 subTestType = "' + subTestType + '",无法解析数据');
                    }
                    break;
                case 'BTEST':
                    if (subTestType === '不定项' || subTestType === '多项') {
                        //以下，题干信息ID
                        idArr['testTitle'] = 'B_checkbox_testTitle_';
                        idArr['testPoint'] = 'B_checkbox_testPoint_';
                        //题干信息结束
                        idArr['itemUiID'] = 'B_checkbox_Items_'
                        idArr['itemID'] = 'B_checkbox_items_';
                        idArr['itemNameID'] = 'B_checkbox_';
                        idArr['itemTextID'] = 'B_checkbox_itemText_';
                        idArr['buttonID'] = 'B_checkbox_btn';
                    } else if (subTestType === '单项') {
                        //以下，题干信息ID
                        idArr['testTitle'] = 'B_radio_testTitle_';
                        idArr['testPoint'] = 'B_radio_testPoint_';
                        //题干信息结束
                        idArr['itemUiID'] = 'B_radio_Items_'
                        idArr['itemID'] = 'B_radio_items_';
                        idArr['itemNameID'] = 'B_radio_';
                        idArr['itemTextID'] = 'B_radio_itemText_';
                    } else {
                        G_Prg.throw('程序运行错误，TestUI._setID：B subTestType = "' + subTestType + '",无法解析数据');
                    }
                    break;
                case 'PDTEST':
                    //以下，题干信息ID
                    idArr['testTitle'] = 'pd_testTitle_';
                    idArr['testPoint'] = 'pd_testPoint_';
                    //题干信息结束
                    idArr['itemUiID'] = 'pd_radio_Items_'
                    idArr['itemID'] = 'pd_radio_items_';
                    idArr['itemNameID'] = 'pd_radio_';
                    idArr['itemTextID'] = 'pd_radio_itemText_';
                    break;
                case 'JDTEST':
                    //以下，题干信息ID
                    idArr['testTitle'] = 'jd_testTitle_';
                    idArr['testPoint'] = 'jd_testPoint_';
                    //题干信息结束
                    idArr['buttonID'] = 'jd_btn';
                    break;
                case 'TKTEST':
                    //以下，题干信息ID
                    idArr['testTitle'] = 'tk_testTitle_';
                    idArr['testPoint'] = 'tk_testPoint_';
                    //题干信息结束
                    idArr['buttonID'] = 'tk_btn';
                    break;
                default:
                    G_Prg.throw('程序运行错误，TestUI._setID：testType = "' + testType + '",无法解析数据');
            }
            return idArr;
        }

        /********************************************************************************
         函数名：_showTopic
         功能：显示试题题干（标题）
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：黎萍（2016-03-29）控制如果是个人中心我的消息进入，则题号显示控制为只有一题
         审查人：无
         *******************************************************************************/
        function _showTopic(curTest, idArr, dragIndex) {
            if (_IsShowTopic) {
                if (_fromUrl === 'myMessage') {
                    _curPage = 1;
                }
                var testNum = '<span class="tigan">' + ((_curPage - 1) * 50 + curTest.testNO) + '</span>/<span class="tishu">' + _gAllTest.getTestCount() + '</span>';
                if (idArr['frontTitle']) {
                    $("#"+idArr['frontTitle'] + dragIndex).html(testNum + curTest.frontTitle); //标题
                    $("#"+idArr['testTitle'] + dragIndex).html(curTest.title); //小标题;
                } else {
                    $("#"+idArr['testTitle'] + dragIndex).html(testNum + curTest.title); //标题
                }
            } else {
                if (idArr['frontTitle']) {
                    $("#"+idArr['frontTitle'] + dragIndex).hide();
                }
                $("#"+idArr['testTitle'] + dragIndex).hide();
            }
        }

        /********************************************************************************
         函数名：_showItems
         功能：显示试题的选项
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showItems(curTest, idArr, dragIndex) {
            var selectedItems = curTest.selectedItems;
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var isRight = _gAllTest.getIsRight(curTest.testNO - 1); //获取标记用户的回答是否正确
            for (var i = 0; i < selectedItems.length; i++) {
                $("#"+idArr['itemID'] + i + '_' + dragIndex).show();
                var itemHtml = '';
                if (testType === 'XTEST' || subTestType === '不定项' || subTestType === '多项') {
                    itemHtml = '<span class="checkboxDefault">';
                } else if (testType === 'ATEST' || testType === 'PDTEST' || subTestType === '单项') {
                    itemHtml = '<span class="radioDefault">';
                }
                if (testType === 'PDTEST') {//判断题的标签lang属性存储的是“对”、“错”，其它题型存储的则是“ABCD”
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).attr('lang',selectedItems[i].Content.replace(/(^\s+)|(\s+$)/g, ""));
                } else {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).attr('lang',selectedItems[i].ItemName);
                }
                $("#"+idArr['itemID'] + i + '_' + dragIndex).html(itemHtml + selectedItems[i].ItemName
                    + '</span><span class="itemContent">' + selectedItems[i].Content.replace(/(^\s+)|(\s+$)/g, "") + '</span>');//去掉前后空格
            }
            var arrLen = $("#"+idArr['itemUiID'] + dragIndex).find('li').length;
            for (var i = selectedItems.length; i < arrLen; i++) {
                $("#"+idArr['itemID'] + i + '_' + dragIndex).hide(); //隐藏没有赋值到的选项
            }
            if (_IsShowItems) {
                for (var i = 0; i < selectedItems.length; i++) {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).show();
                }
            } else {
                for (var i = 0; i < selectedItems.length; i++) {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).hide();
                }
                var arrLen = $("#"+idArr['itemUiID'] + dragIndex).find('li').length;
                for (var i = selectedItems.length; i < arrLen; i++) {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).hide(); //隐藏没有赋值到的选项
                }
            }
            //只有当当前试题用户选择了选项，才显示提交答案按钮
            if (testType === 'XTEST' || subTestType === '不定项' || subTestType === '多项') {
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                if (userReply) {
                    $("#"+idArr['buttonID'] + '_' + dragIndex).show();
                } else {
                    $("#"+idArr['buttonID'] + '_' + dragIndex).hide();
                }
            }
        }

        /********************************************************************************
         函数名：_showResult
         功能：显示试题的正确答案和试题解析
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：谢建沅 答案去掉滚动条控制（2014-09-26）
         修改记录：陶云 添加我要纠正的显示（2015-03-24）
         审查人：无
         *******************************************************************************/
        function _showResult(curTest, idArr, dragIndex) {
            var answerDiv = '<span class="result_flag">正确答案：</span>';
            answerDiv += '<div id="answer_' + dragIndex + '" class="result_text" style="float:left;color:#0C0;">' + curTest.answer;
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            if(testType === 'XTEST' || testType === 'ATEST' || subTestType === '不定项' || subTestType === '多项' || testType === 'PDTEST' || subTestType === '单项'){
                answerDiv += '<span style="color:#666;">    您选择：</span>';
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                var isRight = _gAllTest.getIsRight(curTest.testNO - 1); //获取标记用户的回答是否正确
                if (userReply) {
                    $('#doExamNum' + '_' + dragIndex).hide();
                    $('#unableNum' + '_' + dragIndex).hide();
                    if (isRight === 0) {
                        var unableNum = _gAllTest.getUnableNumber(curTest.testNO - 1);
                        if (unableNum >= 1) {
                            $('#unableNum' + '_' + dragIndex).show();
                        } else {
                            $('#unableNum' + '_' + dragIndex).hide();
                        }
                        answerDiv += '<span class="rightAnswer">' + userReply + '</span>';//<img src="/images/right.png" class="userAswer-img" />
                    } else {
                        $('#unableNum' + '_' + dragIndex).hide();
                        answerDiv += '<span class="errorAnswer">' + userReply + '</span>';//<img src="/images/error.png" class="userAswer-img" />
                    }
                } else {
                    $('#doExamNum' + '_' + dragIndex).hide();
                    $('#unableNum' + '_' + dragIndex).hide();
                    answerDiv += '<span class="errorAnswer">不会</span>';
                }
            }
            $('#testAnswers_' + dragIndex).html(answerDiv+'</div>'); //答案
            $('#explain_' + dragIndex).html('<span class="result_flag">官方解析：</span>'+curTest.explain); //解析
            $('#testPoint_' + dragIndex).html('<span class="result_flag">试题考点：</span>'+curTest.testPoint); //考点
            if (curTest.explain === '无') {
                $('#explain_' + dragIndex).html($('#explain_' + dragIndex).html()+'<div id="userExpBtn_' + dragIndex + '" class="default-btn result_btn">添加</div>');
                if($('#userExpBtn_' + dragIndex)){
                    $('#userExpBtn_' + dragIndex).unbind("click").click(function () {
                        // if(typeof(G_maiDian)!=='undefined'){
                        // G_maiDian.fc_answerClickCount('我来添加');
                        // }
                        _myExplainClick();
                    }); //用户解析 添加按钮单击事件
                }
            }
            var userExplain = _gAllTest.getUserExplain(curTest.testNO - 1);
            if(userExplain){
                _setUserExplain(userExplain,curTest,dragIndex);
            }
            
            if (curTest.testPoint === '无') {
                $('#testPoint_list_' + dragIndex).hide();
            } else {
                $('#testPoint_list_' + dragIndex).show();
            }
            if (_IsShowExplain) {
                $('#test_result_' + dragIndex).show();
                $('#tabMenuList' + '_' + dragIndex).show();
            } else {
                $('#test_result_' + dragIndex).hide();
                $('#tabMenuList' + '_' + dragIndex).hide();
            }
            if (_fromUrl === 'mockExam' && _selected === 1) {
                $('#test_result_' + dragIndex).hide();
            }
            if (_gAllTest.getState(curTest.testNO - 1) !== 'recite') {
                $('#testAnswers_' + dragIndex).show();
            }
            $('#test_result_' + dragIndex).css('margin-bottom','8px');
        }

        /********************************************************************************
         函数名：_showUserExplain
         功能：显示试题的用户解析
         输入参数：curTest 当前试题,dragIndex 滑动层索引
         返回值: 无
         创建信息：黎萍（2016-03-17）
         修改记录：陶云 （2016-05-18）修改用户解析显示的用户昵称，显示该用户解析编辑者的昵称（非当前用户ID）
         审查人：无
         *******************************************************************************/
        function _setUserExplain(userExplain,curTest,dragIndex) {
            if (!_isEmpty(userExplain) && userExplain.content) {
                var nickName = userExplain.nickName;
                if(!nickName){
                    nickName = 'ks'+userExplain.userID;
                }
                $('#explain_' + dragIndex).html('<span class="result_flag">用户解析：</span>'+userExplain.content.replace(new RegExp('\\[br\\]', 'gm'), '<br>')+ '<div id="userExpBtn_' + dragIndex + '" class="blue-btn result_btn">编辑</div>');
                $('#userExpBtn_' + dragIndex).unbind('click').click(function () {
                    _myExplainClick();
                });  //用户解析 添加按钮单击事件
            } else {
                if (curTest.explain === '无' && !$('#userExpBtn_' + dragIndex)) {
                    $('#explain_' + dragIndex).html($('#explain_' + dragIndex).html()+'<div id="userExpBtn_' + dragIndex + '" class="default-btn result_btn">添加</div>');
                }
            }
        }
        /********************************************************************************
         函数名：_showUnable
         功能：显示试题不会做的人数
         输入参数：concernCount 当前试题不会做的人数,dragIndex 滑动层索引
         返回值: 无
         创建信息：卢钊惠（2016-09-13）
         修改记录：无
         *******************************************************************************/
        function _showUnable(concernCount, explainCount, dragIndex) {
            $('#unableAllNumber' + '_' + dragIndex).html(concernCount);
            $('#doExamNumber' + '_' + dragIndex).html(explainCount);
        }
        /********************************************************************************
         函数名：_setKnowledgePoint
         功能：显示试题的考点
         输入参数：knowledgePoint 当前试题考点,dragIndex 滑动层索引
         返回值: 无
         创建信息：黎萍（2016-07-26）
         修改记录：无
         *******************************************************************************/
        function _showKnowledgePoint(knowledgePoint, curTest, dragIndex) {
            $('#knowledgePoint_list' + '_' + dragIndex).hide();
            if (!knowledgePoint.Summary) {//
                $('#knowledgePoint_list' + '_' + dragIndex).hide();
                return;
            }
            $('#knowledgePoint' + '_' + dragIndex).html('<span class="result_flag">考点：</span><div class="default-btn result_btn" style="float:left;">' + knowledgePoint.Summary + '</div>');//
            $('#knowledgePoint' + '_' + dragIndex).unbind('click').click(function () {
                _showKnowledgeContext(curTest, dragIndex);
            });
            $('#knowledgePoint_list' + '_' + dragIndex).show();
        }
        /********************************************************************************
         函数名：_showAnswerCount
         功能：显示试题的统计数据
         输入参数：curTest 当前试题；dragIndex 滑动索引
         返回值: 无
         创建信息：陶云（2016-03-24）
         修改记录：黎萍（2016-04-06）修改纠正答案的统计规则：当前选项的纠正人数/所有选项纠正总人数
         审查人：无
         *******************************************************************************/
        function _setStatisticsData(countResult,dragIndex) {    //回调函数：从接口获取统计数据展示
            if (countResult) {
                if(countResult.test){
                    var userCount = countResult.test.userCount;
                    var rightCount = countResult.test.rightCount;
                }
                var correctData = [];
                if (!_isEmpty(countResult.correction)) {//如果有纠正的数据
                    var dataLength = countResult.correction.length;
                    var totalCount = 0;
                    for (var i = 0; i < dataLength; i++) {//存储修正的百分比
                        totalCount += countResult.correction[i].answerCount;
                    }
                    for (var i = 0; i < dataLength; i++) {//存储修正的百分比
                        correctData.push({
                            'CorrectPer': _getPercent(countResult.correction[i].answerCount, totalCount),
                            'CorrectAnswer': countResult.correction[i].answer
                        });
                    }
                }
                if(!userCount){
                    userCount = '0';
                }
                var countHtml = '<span>此题共'+userCount+'人作答，其中</span>';
                var getRightPer = _getPercent(rightCount, userCount);//计算答对百分值
                if(getRightPer === '-'){
                    getRightPer = '0%';
                }
                if (!_isEmpty(correctData)) {//如果有纠正的百分比需要显示
                    var correctHtml = '';
                    //for (var i = 0; i < correctData.length; i++) {
                    //correctHtml += '<span id="correct_' + 0 + '_' + dragIndex + ' "style="color:#4494DD;">' + correctData[0].CorrectPer + '</span><span>纠正答案为' + correctData[0].CorrectAnswer + '，</span>';
                    //}
                    countHtml  += '<span id="getRight_' + dragIndex + '" style="color:#0C0;">' + getRightPer + '</span><span>的人答对</span>';
                } else {
                    countHtml += '<span id="correct_' + dragIndex + ' "style="color:#4494DD;"></span><span id="getRight_' + dragIndex + '" style="color:#0C0;">' + getRightPer + '</span><span>的人答对</span>';
                }
                $('#dataStatistics_' + dragIndex).html(countHtml) //显示统计数据
            }
        }
        /********************************************************************************
         函数名：_getPercent
         功能：计算百分比
         输入参数：num分子；total分母；
         返回值: 数值的百分比 例如：50.55%
         创建信息：陶云（2016-03-24）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _getPercent(num, total) {
            num = parseFloat(num);
            total = parseFloat(total);
            if (isNaN(num) || isNaN(total)) {
                return '-';
            }
            return total <= 0 ? '0%' : ((num / total) * 100).toFixed(2) + '%';//(Math.round(num / total * 10000) / 100.00 + "%");
        }

        /********************************************************************************
         函数名：_showDiscussInfo
         功能：显示试题的讨论信息
         输入参数：curTest 当前试题；dragIndex 滑动层索引,flag 标记显示的tab菜单
         返回值: 无
         创建信息：黎萍（2016-03-29）
         修改记录：黎萍（2016-04-01）如用户未登录，点击讨论按钮，提示用户登录才能使用该功能
         黎萍（2016-05-16）修改点击展示讨论信息方式：点击“查看讨论”按钮展示信息
         审查人：无
         *******************************************************************************/
        function _showDiscussInfo(discussCount,curTest, dragIndex,flag) {
            //默认选中答案的tab
            $('#tab_result'+ '_' + dragIndex).attr('class','selected radius_left');
            $('#tab_discuss'+ '_' + dragIndex).attr('class','notSelected radius_right');
            
            $('#tab_result'+ '_' + dragIndex).unbind("click").click(function(){
                _showAnswer();
            }); //答案
            $('#tab_discuss'+ '_' + dragIndex).html('讨论（'+discussCount+'）');
            $('#tab_discuss'+ '_' + dragIndex).unbind("click").click(function(){
                _showDiscuss();
            }); //讨论
            if(flag === 2){
                _showDiscuss();
            }
            /********************************************************************************
             功能：显示答案信息tab
             输入参数：无
             返回值: 无
             创建信息：黎萍（2016-06-28）
             修改记录：无
             *******************************************************************************/
            function _showDiscuss(){
                $('#tab_result'+ '_' + dragIndex).attr('class','notSelected radius_left');
                $('#tab_discuss'+ '_' + dragIndex).attr('class','selected radius_right');
                _showDiscussBtn(curTest, 0, dragIndex); //设置讨论内容的显示
                $('#discuss_list'+ '_' + dragIndex).show();
                $('#test_result'+ '_' + dragIndex).hide();
            }
            /********************************************************************************
             功能：显示讨论信息tab
             输入参数：无
             返回值: 无
             创建信息：黎萍（2016-06-28）
             修改记录：无
             *******************************************************************************/
            function _showAnswer(){
                $('#tab_discuss'+ '_' + dragIndex).attr('class','notSelected radius_right');
                $('#tab_result'+ '_' + dragIndex).attr('class','selected radius_left');
                
                $('#test_result'+ '_' + dragIndex).show();
                $('#discuss_list'+ '_' + dragIndex).hide();
            }
        }

        /********************************************************************************
         函数名：_showUserNote
         功能：显示试题的笔记
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showUserNote(curTest, idArr, dragIndex) {
            var arrAllTest = _gAllTest.getArrAllTest();
            var userNote = _gAllTest.getUserNote(curTest.testNO - 1);
            var time = _gAllTest.getTime(curTest.testNO - 1);
            if (userNote === '') {
                userNote = curTest.userNote;
                time = curTest.time;
            }
            var noteInfo = '<span class="result_flag">我的笔记：</span>';
            if (userNote) {
                userNote = userNote.replace(new RegExp('\\[br\\]', 'gm'), '<br>');
                noteInfo += '<div id="myNote" class="noteTxt">' + userNote + '<div id="updateNote_' + dragIndex + '" class="blue-btn result_btn">编辑</div></div>';
                $('#userNote_list_' + dragIndex).show();
            } else {
                //noteInfo += '<div id="myNote" class="noteTxt">无</div>';
                $('#userNote_list_' + dragIndex).hide();
            }
            $('#userNote_' + dragIndex).html(noteInfo);

        }

        /********************************************************************************
         函数名：_showRadioTest
         功能：组合拼接单选试题（ATEST、PDTEST、单项）
         输入参数：curTest 当前试题
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showRadioTest(curTest, dragIndex) {
            var idArr = _setID(curTest);
            _showTopic(curTest, idArr, dragIndex);
            _showItems(curTest, idArr, dragIndex);
            _showResult(curTest, idArr, dragIndex);
            _showUserNote(curTest, idArr, dragIndex);   //显示用户笔记
            _mockRadioDone(curTest, idArr, dragIndex);
            _radioRightAnswer(curTest, idArr, dragIndex);   //批阅：未答试题显示正确答案
            _radioDone(curTest, idArr, dragIndex);  //答题：显示用户所答是否正确
        }

        /********************************************************************************
         函数名：_showCheckboxTest
         功能：组合拼接多选试题（XTEST、多项、不定项）
         输入参数：curTest 当前试题
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showCheckboxTest(curTest, dragIndex) {
            var idArr = _setID(curTest);
            _showTopic(curTest, idArr, dragIndex);
            _showItems(curTest, idArr, dragIndex);
            _showResult(curTest, idArr, dragIndex);
            _showUserNote(curTest, idArr, dragIndex);   //显示用户笔记
            _mockCheckboxDone(curTest, idArr, dragIndex);   //答题：用户仅选择了答案并未提交答案
            _checkboxRightAnswer(curTest, idArr, dragIndex);    //批阅：未答试题显示正确答案
            _checkboxDone(curTest, idArr, dragIndex);  //答题：显示用户所答是否正确
        }

        /********************************************************************************
         功能：组合拼接主观试题（简答题、填空题）
         输入参数：curTest 当前试题,dragIndex滑动层索引
         返回值: 无
         最后修改人：黎萍（2015-01-07）
         修改内容：无
         *******************************************************************************/
        function _subjectiveTest(curTest, dragIndex) {
            var idArr = _setID(curTest);
            _showTopic(curTest, idArr, dragIndex);
            //如果是填空题，则根据答案控制输入框的显示
            /*if (curTest.testType === 'TKTEST') {
             var answerArr = '';
             var answer = curTest.answer;
             if (answer.indexOf('<img') < 0) {
             answerArr = curTest.answer.split('；');
             } else {
             answerArr = [curTest.answer];
             }
             var arrLen = G_Prg.$(idArr['itemOlID'] + dragIndex).getElementsByTagName('li').length;
             for (var i = 0; i < arrLen; i++) {
             if (i < answerArr.length) {
             G_Prg.$(idArr['itemID'] + i + '_' + dragIndex).style.display = '';
             G_Prg.$(idArr['itemTextID'] + i + '_' + dragIndex).value = '';
             } else {
             G_Prg.$(idArr['itemID'] + i + '_' + dragIndex).hide();
             }
             }
             _mockTkDone(curTest, idArr, dragIndex);
             }*/
            _showResult(curTest, idArr, dragIndex);
            _showUserNote(curTest, idArr, dragIndex);   //显示用户笔记
            _mockJDDone(curTest, idArr, dragIndex);
            _textInputed(curTest, idArr, dragIndex);  //答题：显示用户所答是否正确
        }

        /********************************************************************************
         函数名：_showATest
         功能：ATEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showATest(curTest, dragIndex) {
            _showRadioTest(curTest, dragIndex);
            $('#radio_exam_' + dragIndex).show();
        }

        /********************************************************************************
         函数名：_showXTest
         功能：XTEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showXTest(curTest, dragIndex) {
            _showCheckboxTest(curTest, dragIndex);
            $('#checkbox_exam_' + dragIndex).show();
        }

        /********************************************************************************
         函数名：_showA3Test
         功能：A3TEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showA3Test(curTest, dragIndex) {
            var subTestType = curTest.subTestType;
            if (subTestType === '多项' || subTestType === '不定项') {
                _showCheckboxTest(curTest, dragIndex);
                $('#A3_checkbox_exam_' + dragIndex).show();
            } else if (subTestType === '单项') {
                _showRadioTest(curTest, dragIndex);
                $('#A3_radio_exam_' + dragIndex).show();
            } else {
                G_Prg.throw('程序运行错误，TestUI._showA3Test：subTestType = "' + subTestType + '"，无法解析题型');
            }
        }

        /********************************************************************************
         函数名：_showBTest
         功能：BTEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showBTest(curTest, dragIndex) {
            var subTestType = curTest.subTestType;
            if (subTestType === '多项' || subTestType === '不定项') {
                _showCheckboxTest(curTest, dragIndex);
                $('#B_checkbox_exam_' + dragIndex).show();
            } else if (subTestType === '单项') {
                _showRadioTest(curTest, dragIndex);
                $('#B_radio_exam_' + dragIndex).show();
            } else {
                G_Prg.throw('程序运行错误，TestUI._showBTest：subTestType = "' + subTestType + '"，无法解析题型');
            }
        }

        /********************************************************************************
         函数名：_showPDTest
         功能：PDTEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showPDTest(curTest, dragIndex) {
            _showRadioTest(curTest, dragIndex);
            $('#pd_exam_' + dragIndex).show();
        }

        /********************************************************************************
         函数名：_showJDTest
         功能：JDTEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showJDTest(curTest, dragIndex) {
            _subjectiveTest(curTest, dragIndex);
            $('#jd_exam_' + dragIndex).show();
        }

        /********************************************************************************
         函数名：_showTKTest
         功能：TKTEST题型的试题展示
         输入参数: curTeset 当前试题;
         返回值: 无
         创建信息：黎萍（2014-05-30）
         修改记录：黎萍（2014-09-04） 修改解析展示试题方式
         审查人：兰涛（2014-06-26）
         *******************************************************************************/
        function _showTKTest(curTest, dragIndex) {
            var idArr = _setID(curTest);
            _subjectiveTest(curTest, dragIndex);
            $('#tk_exam_' + dragIndex).show();
        }

        /********************************************************************************
         功能：获取显示讨论列表
         输入参数: curTestIndex 当前试题索引,curPage 当前页,type 讨论信息类型
         返回值：discussionData 指定试题下的所有讨论信息
         最后修改人：黎萍（2016-3-16）
         修改内容：黎萍（2016-03-30）修改异步获取数据回调函数的定义
         黎萍（2016-04-07）点击加载更多讨论信息，加载到最后一页时控制加载更多按钮的显示与隐藏
         ********************************************************************************/
        function _showDiscussBtn(curTest, curPage, dragIndex, type, action) {
            var appID = G_Cookie.getAppID();
            if (!appID) {
                G_Prg.throw('程序运行错误，不能处理 testUI._showDiscussBtn: appID=' + appID);
            }
            var eachPageNum = 10;   //每页显示数量
            _gAllTest.getDiscussionList(curTest, appID, curPage, eachPageNum, type, _setDiscussBtnShow);
            //回调函数：异步从接口获取数据展示
            function _setDiscussBtnShow(jsonData) {
                var discussionCount = jsonData.total;
                _gAllTest.setDiscussCount(discussionCount);
                $('#tab_discuss' + '_' + dragIndex).html('讨论（' + discussionCount + '）');
                $('#discuss_add' + '_' + dragIndex).unbind("click").click(function () {
                    if (typeof(G_maiDian) !== 'undefined') {
                        G_maiDian.fc_answerClickCount('添加讨论');
                    }
                    _discussionClick('add');
                }); //添加讨论
                if (_fromUrl === 'myMessage'){
                    $('#tabMenuList_' + dragIndex).show();
                    $('#tab_result_' + dragIndex).removeClass('selected').addClass('notSelected');
                    $('#tab_discuss_' + dragIndex).addClass('selected').removeClass('notSelected');
                }
                $('#discuss_add' + '_' + dragIndex).show();     //添加讨论按钮
                $('#discuss_more' + '_' + dragIndex).unbind("click").click(function () {
                    curPage = curPage + 1;
                    _gAllTest.getDiscussionList(curTest, appID, curPage, eachPageNum, type, _getMoreDiscussion);
                }); //加载更多讨论，只针对最新讨论信息

                _discussCountClick(jsonData, discussionCount, dragIndex);//展示详细信息列表

            }

            //加载更多讨论信息
            function _getMoreDiscussion(jsonData) {
                var discussionCount = jsonData.total;
                discussionCount = discussionCount - (eachPageNum * curPage);
                _discussCountClick(jsonData, discussionCount, dragIndex, 'more');
            }

            //讨论总数按钮单击事件
            function _discussCountClick(jsonData, discussionCount, dragIndex, moreFlag) {
                _showNewDiscussion(jsonData.list, discussionCount, dragIndex, moreFlag);
                $('#discuss_list' + '_' + dragIndex).show();
                $('#discuss_add' + '_' + dragIndex).show();     //添加
                if (discussionCount >= eachPageNum) {
                    $('#discuss_more' + '_' + dragIndex).show();    //更多
                } else {
                    $('#discuss_more' + '_' + dragIndex).hide();    //更多
                }
            }
        }

        /********************************************************************************
         功能：获取并展示当前试题的最新讨论信息列表
         输入参数: discussionData 指定试题下的所有讨论信息
         返回值：无
         最后修改人：黎萍（2016-3-17）
         修改内容：黎萍（2016-04-01）控制如果是点击加载更多进入展示数据，不清空之前加载的数据
         黎萍（2016-05-13）点赞修改成只有点击手型才生效
         ********************************************************************************/
        function _showNewDiscussion(discussionData, discussionCount, dragIndex, moreFlag) {
            if (moreFlag !== 'more') {
                $('#discuss_new_list' + '_' + dragIndex).html('');
            }
            var dataLen = discussionData.length;
            for (var i = 0; i < dataLen; i++) {
                var new_dlTag0 = $('<dl></dl>');
                new_dlTag0.attr('id','new_reply_list_' + i + '_' + discussionCount + '_' + dragIndex);
                new_dlTag0.attr('lang',discussionData[i].discussionID + '-' + discussionData[i].userID);
                var new_dtTag0 = $('<dt></dt>');
                new_dtTag0.attr('class','discuss_context');
                new_dtTag0.attr('id','new_reply_btnDis_' + i + '_' + discussionCount + '_' + dragIndex);
                new_dtTag0.attr('lang',discussionData[i].discussionID + '-' + discussionData[i].userID);
                var hot_spanTag = $('<span></span>')
                hot_spanTag.attr('class','discuss_context_type');
                if (discussionData[i].type === 1) {
                    hot_spanTag.css('background-color','#f66161');
                    hot_spanTag.html('纠错');
                    new_dtTag0.append(hot_spanTag);
                } else if (discussionData[i].type === 2) {
                    hot_spanTag.css('background-color','#3ecd1d');
                    hot_spanTag.html('求助');
                    new_dtTag0.append(hot_spanTag);
                }

                var new_spanTag0 = $('<span></span>')
                new_spanTag0.html(discussionData[i].content.replace(new RegExp('\\[br\\]', 'gm'), '<br>'));
                new_dtTag0.append(new_spanTag0);
                new_dlTag0.unbind("click").click(function () {
                    if ($(this).attr('lang').split('-')[1] === G_Cookie.getUserID()) {  //用户不能对自己发表的内容进行点赞
                        return;
                    }
                    _discussionClick('reply', $(this).attr('lang').split('-')[0]);  //回复
                });

                var new_ddTag0 = $('<dd></dd>')
                new_ddTag0.attr('id','new_reply_agree_' + i + '_' + discussionCount + '_' + dragIndex);
                new_ddTag0.attr('lang',discussionData[i].discussionID + '_' + discussionData[i].userID);
                new_ddTag0.attr('class','discuss_agree');

                var new_timeTag0 = $('<span></span>')
                new_timeTag0.attr('class','noteTime');
                new_timeTag0.css('float','left');
                new_timeTag0.html(discussionData[i].createTime.split(' ')[0] + '&nbsp;' + discussionData[i].nickName);
                new_ddTag0.append(new_timeTag0);
                var new_imgTag0 = $('<img />')
                new_imgTag0.attr('id','new_reply_agree_img_' + i + '_' + discussionCount + '_' + dragIndex);
                new_imgTag0.attr('lang',discussionData[i].discussionID + '_' + discussionData[i].userID);
                new_imgTag0.attr('src','/images/ans/agree_not.png');
                if (discussionData[i].isCommended === 1) {
                    new_imgTag0.attr('src','/images/ans/agree.png');
                } else {
                    new_imgTag0.attr('src','/images/ans/agree_not.png');
                }
                var new_countTag0 = $('<span></span>')
                new_countTag0.html(discussionData[i].commendCount);
                new_countTag0.attr('id','new_reply_agree_count_' + i + '_' + discussionCount + '_' + dragIndex);
                var agreeDiv = $('<div></div>')
                agreeDiv.css('float','right');
                agreeDiv.append(new_countTag0);
                agreeDiv.append(new_imgTag0);
                new_ddTag0.append(agreeDiv);
                (function (n) {
                    //new_ddTag0.onclick = function () {
                    new_imgTag0.unbind("click").click(function (event) {
                        if (typeof(G_maiDian) !== 'undefined') {
                            G_maiDian.fc_answerClickCount('点赞');
                            event.stopPropagation();
                        }
                        _setDiscussionAgree($(this).attr('lang'), $(this).attr('id'), n, discussionCount, dragIndex);//点赞
                        event.stopPropagation();
                    });
                })(i);

                new_dlTag0.append(new_dtTag0);
                new_dlTag0.append(new_ddTag0);
                $('#discuss_new_list' + '_' + dragIndex).append(new_dlTag0);    //用户的讨论信息

                if (discussionData[i].replyToID > -1) {
                    new_dlTag0.css('border-bottom','none');
                    var new_dlTag = $('<dl></dl>')
                    new_dlTag.attr('id','new_list_' + i + '_' + discussionCount + '_' + dragIndex);
                    var new_dtTag = $('<dt></dt>');
                    new_dtTag.attr('class','discuss_context');
                    new_dtTag.attr('id','new_btnDis_' + i + '_' + discussionCount + '_' + dragIndex);
                    new_dtTag.attr('lang',discussionData[i].replyToID + '-' + discussionData[i].replyType);
                    var new_spanTag = $('<span></span>');
                    new_spanTag.html('回复：' + discussionData[i].replyContent.replace(new RegExp('\\[br\\]', 'gm'), '<br>'));
                    new_dtTag.append(new_spanTag);

                    var new_ddTag = $('<dd></dd>')
                    new_ddTag.attr('id','new_agree_' + i + '_' + discussionCount + '_' + dragIndex);
                    new_ddTag.attr('lang',discussionData[i].replyToID + '_' + discussionData[i].replyUserID);
                    new_ddTag.attr('class','discuss_agree');
                    var new_timeTag = $('<span></span>')
                    new_timeTag.attr('class','noteTime');
                    new_timeTag.html(discussionData[i].replyCreateTime.split(' ')[0] + '&nbsp;' + discussionData[i].replyNickName);
                    new_ddTag.append(new_timeTag);

                    var new_divTag = $('<div></div>')
                    new_divTag.attr('class','discuss_agree_div');
                    new_divTag.append(new_dtTag);
                    new_divTag.append(new_ddTag);
                    new_dlTag.append(new_divTag);
                    $('#discuss_new_list' + '_' + dragIndex).append(new_dlTag); //被讨论的内容
                }
            }
            _setCss();
        }

        /********************************************************************************
         函数名：_showConfigJsonInfos
         功能：显示模拟考场配置信息
         输入参数:  无
         返回值: 无
         创建信息：黎萍（2014-10-22）
         修改记录：黎萍（2016-04-27）批阅后，不再显示配置信息
         审查人：无
         *******************************************************************************/
        function _showConfigJsonInfos() {
            if (_isEmpty(_gAllTest.getConfigJson()) || _gAllTest.getState(_gAllTest.getCurIndex()) === 'marked') {
                return;
            }
            var configJson = JSON.parse(_gAllTest.getConfigJson());
            var defaulted = G_Prg.getQueryString('defaulted');
            var name = configJson.ConfigTitle + '：';    //配置名称
            var testCount = 0;  //总题量
            var testScore = 0;  //总分数
            var testTotalInfos = '';
            var showInfos = '';
            var styleInfos = '';
            var arrStyles = new Object();

            if (defaulted === '1') {    //解析默认模拟考场配置
                var configItems = configJson.ConfigItems;
                for (var j = 0; j < configItems.length; j++) {
                    var styles = configItems[j].Styles;
                    for (var i = 0; i < styles.length; i++) {
                        if (Number(styles[i].TestNum) !== 0) {
                            testCount += Number(styles[i].TestNum);
                            testScore += Number(styles[i].TestNum) * Number(styles[i].Score);
                            var key = styles[i].Style.replace(/(^\s+)|(\s+$)/g, "");
                            if (key in arrStyles) {
                                var value = arrStyles[key];
                                arrStyles[key] = [value[0] + Number(styles[i].TestNum), Number(styles[i].Score)];
                            } else {
                                arrStyles[key] = [Number(styles[i].TestNum), Number(styles[i].Score)];
                            }
                        }
                    }
                }
                for (var k in arrStyles) {
                    styleInfos += '<div style="text-align:right; width:120px; float:left;">' + k + '：</div><div style="width:110px; float:left;">' + arrStyles[k][0] + '题 /' + arrStyles[k][1] + '分</div>';
                }
                testTotalInfos += '<div style="text-align:right; width:120px; float:left;">总题量：</div><div style="width:160px; float:left;">' + testCount + '题 满分：' + testScore + '分</div>';
                // G_Prg.popMsgDialog(testTotalInfos + styleInfos);
                // $('#popdvMsgBox').css('width','280px');
            }
        }

        function _isEmpty(obj) {
            for (var name in obj) {
                return false;
            }
            return true;
        };
        /********************************************************************************
         函数名：_seClickEvent
         功能：设计做题页面中所有的按钮的单击事件
         输入参数:  无
         返回值: 无
         创建信息：黎萍（2014-05-29）
         修改记录：韦友爱（2014-07-02）添加收藏、取消收藏的单击事件
         修改记录：黎萍（2015-03-18）批阅之后禁止使用背题模式
         黎萍（2015-07-30）添加纠错单击事件
         陶云（2016-03-23）添加我要纠正单击事件
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _setClickEvent(curTest, dragIndex) {
            // $('#tipDiv_1').unbind("click").click(function () {
            //     $('#tipDiv_1').hide();
            //     $('#tipDiv_2').show();
            // });  //提示层
            // $('#tipDiv_2').unbind("click").click(function () {
            //     $('#tipDiv_2').hide();
            //     $('#tipDiv_3').show();
            // });  //提示层
            // $('#tipDiv_3').unbind("click").click(function () {
            //     $('#tipDiv_3').hide();
            // });  //提示层
            $('#userScoreBtn').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('成绩');
                }
                _showScore();
            }); //成绩 单击事件设置
            $('#marking').unbind("click").click(function () {
                G_UserAction.addUserAction('markBtn');
                $('#testMenu').hide();
                _markingClick();
            }); //批阅 单击事件设置
            $('#chaptername').unbind("click").click(function () {
                G_UserAction.addUserAction('exitExamBtn');
                _goBackDir();
            }); //返回章节目录
            $('#back').unbind("click").click(function () {
                _goBackDir();
            }); //返回章节目录
            $('#fav').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('收藏');
                }
                G_UserAction.addUserAction('addFavBtn');
                _addFav();
            }); //设置收藏按钮点击事件
            $('#removeFav').unbind("click").click(function () {
                G_UserAction.addUserAction('removeFavBtn');
                _removeFav();
            }); //设置取消收藏按钮点击事件
            $('#menuBar').unbind("click").click(function (event) {
                G_UserAction.addUserAction('moreActionBtn');
                _showTestMenuBar(dragIndex);
                //阻止冒泡
                event = event ? event : window.event;
                event.stopPropagation();
            }); //点击右上角图片，显示功能菜单栏
            $('#titleCard').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('题卡');
                }
                G_UserAction.addUserAction('titleCardBtn');
                _showTitleCard(dragIndex);
            }); //显示题卡单击事件
            $('#softSetting').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('设置');
                }
                G_UserAction.addUserAction('settingBtn');
                $('#testMenu').hide();
                $('#settingDialog').html('');
                G_Prg.htmlContent('80%', '250px', '软件设置', '', true);//弹出窗口，把html移动到弹出框，动态添加
                $('#hcdialogBody').html(_setHtml);
                $('#hcdvMsgBackBtn').hide();
                $('#hcdvMsgClose').show();
                $('#hcShowBolightBox').unbind("click").click(function () {
                    G_UserAction.addUserAction('backFromSetBtn');
                    G_DialogContent.dispose();
                }); //软件设置，点击其它地方也能够消失
                _softSetting();
            }); //设置软件设置按钮点击事件
            $('#softSetting2').unbind("click").click(function () {
                G_UserAction.addUserAction('settingBtn');
                $('#testMenu').hide();
                $('#settingDialog').html('');
                G_Prg.htmlContent('80%', '250px', '软件设置', '', true);//弹出窗口，把html移动到弹出框，动态添加
                $('#hcdialogBody').html(_setHtml);
                $('#hcdvMsgBackBtn').hide();
                $('#hcdvMsgClose').show();
                $('#hcShowBolightBox').unbind("click").click(function () {
                    G_UserAction.addUserAction('backFromSetBtn');
                    G_DialogContent.dispose();
                })  //软件设置，点击其它地方也能够消失
                _softSetting();
            }); //设置软件设置按钮点击事件
            $('#testMenu').unbind("click").click(function (event) {
                event = event ? event : window.event;
                event.stopPropagation();
            }); //点击设置菜单阻止事件冒泡
            $('#retake').unbind("click").click(function () {
                G_UserAction.addUserAction('retakeBtn');
                _reloadTest(dragIndex);
            }); //重考单击事件
            if (_fromUrl === 'mockExam' || !G_Cookie.getUserID() || _gAllTest.getState(curTest.testNO - 1) === 'marked') {//模拟考场禁止使用背题模式
                $('#reciteTest').css('display','none');
                // $('#testMenu').css({'display':'none','width':'77%','background-size':'77% 109px'});  //调整更多里面弹窗的高度
            } else {
                $('#reciteTest').unbind("click").click(function () {
                    if (typeof(G_maiDian) !== 'undefined') {
                        G_maiDian.fc_answerClickCount('背题');
                    }
                    G_UserAction.addUserAction('reciteBtn');
                    _reciteOrDoTest('recite');
                }); //背题单击事件
                $('#doTest').unbind("click").click(function () {
                    if (typeof(G_maiDian) !== 'undefined') {
                        G_maiDian.fc_answerClickCount('答题');
                    }
                    G_UserAction.addUserAction('doBtn');
                    _reciteOrDoTest('do');
                }); //答题单击事件
            }
            if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {
                $('#feedbackWrong').unbind("click").click(function () {
                });
            } else {
                $('#feedbackWrong').unbind("click").click(function () {
                    if (typeof(G_maiDian) !== 'undefined') {
                        G_maiDian.fc_answerClickCount('纠错');
                    }
                    _feedbackWrongClick(curTest,dragIndex);
                }); //设置错题反馈按钮点击事件
            }
            $('#note').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('添加笔记');
                }
                _myNoteClick();
            }); //笔记添加按钮单击事件
             $('#updateNote').unbind("click").click(function () {
                    _updateNoteClick(dragIndex);
                }); //设置用户笔记按钮点击事件
            if ($('#updateNote_' + dragIndex)) {
                $('#updateNote_' + dragIndex).unbind('click').click(function () {
                    _updateNoteClick(dragIndex);
                }); //设置用户笔记按钮点击事件
            }
            $('#refresh').unbind("click").click(function () {
                if (typeof(G_maiDian) !== 'undefined') {
                    G_maiDian.fc_answerClickCount('刷新');
                }
                location.reload(true);
            }); //工具栏里面的刷新按钮
            $('#unableBtn_' + dragIndex).unbind("click").click(function () {
                $('#unableBtn_' + dragIndex).css('background-image','url(/images/unable2.png)');
                _cantDoClick(curTest, dragIndex);
            });  //不会 按钮的单击事件
        }

        /********************************************************************************
         _showQuestAndVideoBtn
         功能：背题模式和答题模式的功能设置
         输入参数:curTest 当前试题, dragIndex滑动拖动层索引
         返回值：无
         创建信息：黎萍（2015-05-12）
         修改记录：黎萍（2015-05-14）点击“章节视频”，如果是游客，提示游客去登录
         黎萍（2015-07-14）添加安卓封壳视频播放控制
         审查人：无
         *******************************************************************************/
        function _showQuestAndVideoBtn(curTest, dragIndex) {
            var videoBtn = $('#videoBtn' + '_' + dragIndex);
            var simulated = G_Prg.getQueryString('simulated');
            var type = G_Prg.getQueryString('type');
            /*
             var version = G_Prg.getCookie('VERSION'); //获取版本号
             var clientType = G_Cookie.getClientType();
             if(version && clientType){
             version = version.replace('v','');
             version = parseFloat(version);
             }*/
            if (_gAllTest.getState(curTest.testNO - 1) === 'commited' || _gAllTest.getState(curTest.testNO - 1) === 'marked') {
                videoBtn.show();
                if (type === 'easyError' || _fromUrl === 'yhyc' || (_fromUrl === 'mockExam' && simulated === '0')) {
                    videoBtn.html('视频讲解');
                    videoBtn.unbind("click").click(function () {
                        if (typeof(G_maiDian) !== 'undefined') {
                            G_maiDian.fc_answerClickCount('章节视频');
                        }
                        /*if (version >= 5.65 && clientType === 'android') {
                         window.Video.VideoSrc('http://up.ksbao.com/jinyingjie/yhyc/'+curTest.allTestID+'.MP4');
                         }else{*/
                        window.location.href = '/video-list?fromUrl=answerExam&type=easyError&videoName=' + curTest.allTestID + '&page=' + _curPage;
                        //}
                    });
                } else {
                    videoBtn.unbind("click").click(function () {
                        if (typeof(G_maiDian) !== 'undefined') {
                            G_maiDian.fc_answerClickCount('章节视频');
                        }
                        if (!G_Cookie.getUserID()) {
                            var yesCallback = function () {
                                window.location.href = '/login';
                            }
                            G_Prg.confirm('该功能登录后才能使用！', yesCallback, function(){
                                window.location.href = '/doExam-index';
                            });
                            return;
                        }
                        window.location.href = '/video-list?fromUrl=answerExam&type=jpkc&cptVideo=cptVideo&cptName=' + _title;
                    });
                }
                videoBtn.hide();
            } else {
                videoBtn.hide();
                return;
            }
        }

        /********************************************************************************
         函数名：_reciteOrDoTest
         功能：背题模式和答题模式的功能设置
         输入参数:flag 标记是答题模式，还是背题模式
         返回值：无
         创建信息：黎萍（2015-03-18）
         修改记录：批阅之后禁止使用背题模式
         审查人：无
         *******************************************************************************/
        function _reciteOrDoTest(flag) {
            /*//批阅之后禁止使用背题模式
             if(_gAllTest.getState(curTest.testNO-1) === 'marked'){//背题模式
             return;
             }*/
            if (flag === 'recite') {
                doTest = false;
                _gAllTest.setState('recite', 1);
                _gAllTest.setAction('', 1);
                $('#testMenu').hide();
                $('#reciteTest').hide();    //隐藏背题按钮
                $('#marking').hide();
                $('#userScoreBtn').hide();
                $('#doTest').show();    //点击背题，显示答题按钮
            } else if (flag === 'do') {
                _gAllTest.recoverState();
                doTest = true;
                $('#testMenu').hide();
                $('#doTest').hide();    //点击答题，显示背题按钮
                $('#reciteTest').show();    //隐藏答题按钮
                $('#marking').show();
                if (_fromUrl !== 'mockExam') {
                    $('#userScoreBtn').show();
                }

                var arrAllTest = _gAllTest.getArrAllTest();
                for (var i = 0; i < arrAllTest.length; i++) {   //如果之前背题模式有点击了‘查看答案’，将其action清空
                    _gAllTest.setAction('', 1);
                    if (_gAllTest.getState(i) === 'marked') {
                        $('#marking').hide();
                        $('#retake').show();
                    } else {
                        $('#marking').show();//显示批阅按钮
                    }
                }
            }
            _maiDianTestCount();//答题统计埋点
            _gAllTest.move(_gAllTest.getCurIndex());    //跳转到指定试题
            _init(0);
            _setCss();
            _gFlipsnap.moveToPoint(_getDragIndexByTestIndex(), 0);  //滑动到指定的层
        }

        /********************************************************************************
         函数名：_setTestEvent
         功能：设置选项的单击事件
         输入参数:curTest 当前试题, dragIndex 滑动层索引
         返回值：无
         创建信息：黎萍（2014-06-06）
         修改记录：无
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _setTestEvent(curTest, dragIndex) {
            var idArr = _setID(curTest);
            var buttonID = $("#"+idArr['buttonID'] + '_' + dragIndex); //多选题提交答案按钮，简答题、填空题输入答案按钮

            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var itemLen = curTest.selectedItems.length;
            if (testType === 'ATEST' || testType === 'PDTEST' || subTestType === '单项') {
                //设置radio的onclick事件
                for (var i = 0; i < itemLen; i++) {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).unbind("click").click(function () {
                        _IsHandle = 1;  //标记是否进行了试题的相关操作
                        //_checkSetAudio(); //功能：检测用户浏览器是否支持audio标签，根据不同的浏览器设置其支持的音乐格式
                        G_UserAction.addUserAction('selItem');
                        if (_fromUrl !== 'mockExam') {
                            _radioClick(curTest, $(this).attr('lang'), dragIndex);
                        } else {
                            _radioSelected(curTest, idArr['itemID'], $(this).attr('lang'), dragIndex);//如果是从模拟考场进入做题界面，更改单选题的单击事件
                        }
                    });
                    if (!_IsDisabled) {
                        $("#"+idArr['itemID'] + i + '_' + dragIndex).unbind("click").click(function () {
                        });
                    }
                }
            } else if (testType === 'XTEST' || subTestType === '不定项' || subTestType === '多项') {
                //设置复选框选择时的onclick事件
                for (var i = 0; i < itemLen; i++) {
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).unbind("click").click(function () {
                        _IsHandle = 1;  //标记是否进行了试题的相关操作
                        G_UserAction.addUserAction('selItem');
                        _checkboxSelected(curTest, idArr['itemID'], $(this).attr('lang'), dragIndex);
                        if (_fromUrl !== 'mockExam') {
                            buttonID.show();    //用户输入答题内容，出现提交答案按钮
                        }
                    });
                    if (!_IsDisabled) { //批阅后禁止答题
                        $("#"+idArr['itemID'] + i + '_' + dragIndex).unbind("click").click(function () {
                        });
                    }
                }
                if (_fromUrl !== 'mockExam') {
                    //设置checkbox中button的onclick事件
                    function _checkClick() {
                        for (var i = 0; i < itemLen; i++) {
                            var className = $("#"+idArr['itemID'] + i + '_' + dragIndex).find('span').eq(0).attr('class').split(' ')[1];//ABCD所在的标签类样式
                            if (className === 'radioSelected' || className === 'radioRight' || className === 'radioError') {
                                return true;
                            }
                        }
                        return false;
                    }

                    buttonID.unbind("click").click(function () {
                        if (typeof(G_maiDian) !== 'undefined') {
                            G_maiDian.fc_answerClickCount('提交答案');
                        }
                        //_checkSetAudio(); //功能：检测用户浏览器是否支持audio标签，根据不同的浏览器设置其支持的音乐格式
                        G_UserAction.addUserAction('commitBtn');
                        if (!_checkClick()) {
                            G_Prg.alert('请您选择答案！');
                            return;
                        }
                        _submitCheckboxClick(curTest, idArr['itemID'], dragIndex);
                        buttonID.hide();    //提交答案后，隐藏按钮
                    });
                    if (!_IsDisabled) { //批阅后禁止答题
                        buttonID.unbind("click").click(function () {
                        });
                        buttonID.css('color','#999');   //将按钮灰掉
                    }
                } else {
                    buttonID.hide();    //模拟考场，多选题的提交答案按钮隐藏掉
                }
            } else if (testType === 'JDTEST' || testType === 'TKTEST') {
                buttonID.unbind("click").click(function () {
                    if (typeof(G_maiDian) !== 'undefined') {
                        G_maiDian.fc_answerClickCount('提交答案');
                    }
                    _addUserTestInfos('addAnswer', '添加答案');
                });
                if ($('#unableBtn_jd_' + dragIndex)) {
                    $('#unableBtn_jd_' + dragIndex).show();
                    $('#unableBtn_jd_' + dragIndex).unbind('click').click(function () {
                        _cantDoClick(curTest, dragIndex);
                    });  //不会 按钮的单击事件
                }
                if ($('#unableBtn_tk_' + dragIndex)) {
                    $('#unableBtn_tk_' + dragIndex).show();
                    $('#unableBtn_tk_' + dragIndex).unbind('click').click(function () {
                        _cantDoClick(curTest, dragIndex);
                    });  //不会 按钮的单击事件
                }
                if (!_IsDisabled || _gAllTest.getUserReply(curTest.testNO - 1)) {
                    buttonID.hide();    //模拟考场，简答题、填空题的查看答案按钮隐藏掉；批阅后隐藏按钮
                } else {
                    buttonID.show();
                }
            }
        }

        /********************************************************************************
         函数名：_setExamType
         功能：设置测试类型
         输入参数:无
         返回值：无
         创建信息：黎萍（2014-08-01）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setExamType() {
            var examType = 0;
            switch (_fromUrl) {
                case 'chapterThree':
                    examType = 1;   //章节练习
                    break;
                case 'mockExam':
                    examType = 2;   //模拟考场
                    break;
                case 'searchExam':
                    var type = G_Prg.getQueryString('type');
                    ;
                    switch (type) {
                        case 'userError':
                            examType = 3;   //错题重做
                            break;
                        case 'userFav':
                            examType = 4;   //我的收藏
                            break;
                        case 'userNote':
                            examType = 5;   //我的笔记
                            break;
                        case 'findTest':
                            examType = 6;   //查找试题
                            break;
                    }
                    break;
            }
            return examType;
        }

        /********************************************************************************
         函数名：_checkInfos
         功能：将数据添加到数据库之前对参数进行验证
         输入参数:flag 标记用户是游客还是已登录的用户：yes 为登录用户，no 为游客身份
         返回值：infosArr 参数数组
         创建信息：黎萍（2014-08-01）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _checkInfos(flag) {
            var userID = G_Cookie.getUserID();
            if (flag === 'no') {
                //判断用户是否已登陆
                if (!userID) {
                    return;
                }
            } else if (flag === 'yes') {
                //判断用户是否已登陆
                if (!userID) {
                    var _yesCallback = function () {
                        window.location.href = '/login';
                    }
                    G_Prg.confirm('该功能请登录后使用！', _yesCallback, function(){
                                window.location.href = '/doExam-index';
                            });
                    return;
                }
            } else {
                G_Prg.alert('抱歉，TestUI._checkInfos: flag = "' + flag + '" 传入的参数无效！');
            }
            var appID = G_Cookie.getAppID();
            if (!appID) {
                G_Prg.throw('程序运行错误，不能处理 testUI._checkInfos: appID=' + appID);
            }
            var userName = G_Cookie.getUserName();
            var guid = G_Cookie.getGuid();
            var infosArr = new Object();
            infosArr['appID'] = appID;
            infosArr['userID'] = userID;
            infosArr['userName'] = userName;
            infosArr['guid'] = guid;
            return infosArr;
        }

        /********************************************************************************
         以下为试题正确答案显示处理代码部分
         *******************************************************************************/
        /********************************************************************************
         函数名：_radioRightAnswer
         功能：（批阅后）显示单选题正确答案
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _radioRightAnswer(curTest, idArr, dragIndex) {
            if (!_IsShowRightAnswer) {
                return;
            }
            var itemNameID = idArr['itemID']; //选项所在的a标签的ID
            var resultID = 'test_result_' + dragIndex; //显示正确答案和解题思路的div层的ID
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var itemLen = curTest.selectedItems.length;
            for (var i = 0; i < itemLen; i++) {
                if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === curTest.answer) {
                    $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault');
                    $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer'); //改变正确答案的字体样式
                    $("#"+idArr['itemID'] + i + '_' + dragIndex).show();
                }
            }
        }

        /********************************************************************************
         函数名：_radioRightAnswer
         功能：（批阅后）显示多选题正确答案
         输入参数：curTest 当前试题；idArr 试题所在标签的id数组
         返回值: 无
         创建信息：黎萍（2014-09-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _checkboxRightAnswer(curTest, idArr, dragIndex) {
            if (!_IsShowRightAnswer) {
                return;
            }
            var itemNameID = idArr['itemID']; //选项所在的a标签的ID
            var resultID = 'test_result_' + dragIndex; //显示正确答案和解题思路的div层的ID
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var itemLen = curTest.selectedItems.length;
            var selectedItems = curTest.selectedItems;
            var answerIndex = ''; //正确答案的索引
            if (!answerIndex) {
                for (var i = 0; i < itemLen; i++) {
                    if (curTest.answer.indexOf($("#" + itemNameID + i + '_' + dragIndex).attr('lang')) >= 0) {
                        answerIndex += i + ','; //取得正确答案的checkbox的索引
                    }
                }
            }
            if (answerIndex) {
                answerIndex = answerIndex.split(',');
            }
            if (answerIndex[answerIndex.length - 1] === '') {
                answerIndex.pop();
            }
            for (var a = 0; a < answerIndex.length; a++) {
                $("#"+itemNameID + answerIndex[a] + '_' + dragIndex).show();
                $("#"+itemNameID + answerIndex[a] + '_' + dragIndex).attr('lang',selectedItems[answerIndex[a]].ItemName);
                $("#"+itemNameID + answerIndex[a] + '_' + dragIndex).html('<span class="checkboxDefault">' + selectedItems[answerIndex[a]].ItemName
                    + '</span><span class="itemContent">' + selectedItems[answerIndex[a]].Content.replace(/(^\s+)|(\s+$)/g, "") + '</span>');//去掉前后空格
                $("#"+itemNameID + answerIndex[a] + '_' + dragIndex).find('span').eq(0).attr('class','checkboxDefault');
                $("#"+itemNameID + answerIndex[a] + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer');
            }
        }

        /********************************************************************************
         函数名：_checkSetAudio
         功能：检测用户浏览器是否支持audio标签，根据不同的浏览器设置其支持的音乐格式
         输入参数：playerID 音频ID
         返回值：无
         创建信息：黎萍（2014-09-15）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _checkSetAudio() {
            if (!(!!document.createElement('audio').canPlayType)) {
                G_Prg.alert('抱歉，您的浏览器不支持 audio 标签。');
                return;
            }
            var browser = G_Prg.getBrowserVersion().split(' ');
            var rightMedia = $('#rightMedia');
            var wrongMedia = $('#wrongMedia');
            //不同浏览器支持不同的音乐格式
            if (browser[0] === 'firefox') {
                rightMedia.src = '/media/right_answer.ogg';
                wrongMedia.src = '/media/wrong_answer.ogg';
            } else if (browser[0] === 'opera') {
                rightMedia.src = '/media/right_answer.wav';
                wrongMedia.src = '/media/wrong_answer.wav';
            } else {
                rightMedia.src = '/media/right_answer.mp3';
                wrongMedia.src = '/media/wrong_answer.mp3';
            }
            rightMedia.preload = 'preload';
            wrongMedia.preload = 'preload';
            rightMedia.load();
            wrongMedia.load();
        }

        /********************************************************************************
         函数名：_setReplyLookTime
         功能：添加浏览试消耗的时间到数据库中
         输入参数：无
         返回值：无
         创建信息：黎萍（2016-02-26）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setReplyLookTime(testObj) {
            if (_replyStartTime) {
                var endTime = new Date();
                var useTime = (endTime.getTime() - _replyStartTime.getTime()) / 1000;
                var index = 0;
                if (_gAllTest.getCurIndex() === 0) {
                    index = _gAllTest.getCurIndex();
                } else {
                    index = _gAllTest.getCurIndex() - 1;
                }
                var preTest = {};
                if (testObj) {
                    preTest = testObj;
                } else {
                    preTest = _gAllTest.getTest(index);
                }
                var appID = G_Cookie.getAppID();
                if (!appID) {
                    G_Prg.throw('程序运行错误，TestUI._setReplyLookTime : appID = "' + appID + '",获取数据出现异常');
                }
                var userID = G_Cookie.getUserID();
                if (!userID) {
                    //G_Prg.throw('程序运行错误，TestUI._setReplyLookTime : userID = "'+userID+'",获取数据出现异常');
                    return;
                }
                //console.log('testNO:'+preTest.testNO+'、'+endTime.getTime()+'-'+_replyStartTime.getTime()+'='+Math.ceil(useTime));
                //_gAllTest.addReplyLookTime(preTest,appID,userID,useTime);
            }
        }

        /********************************************************************************
         函数名：_addReplyLog
         功能：添加答题明细记录到数据库中
         输入参数：isRight 标记用户的回答是否正确,userReply 用户的回答
         返回值：无
         创建信息：黎萍（2014-08-19）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _addReplyLog(curTest, isRight, userReply, flag) {
            var isFlag = flag || 'no';
            var replyEndTime = new Date();
            var examType = _setExamType();
            var infosArr = _checkInfos(isFlag);
            if (!infosArr) {
                return;
            }
            //添加答题明细记录
            _gAllTest.addReplyLog(curTest, infosArr['appID'], infosArr['userID'], infosArr['userName'], infosArr['guid'], userReply, isRight, replyEndTime, _replyStartTime, examType);
        }

        /********************************************************************************
         函数名：_player
         功能：对用户回答错误与否播放提示音
         输入参数：playerID 音频ID
         返回值：无
         创建信息：黎萍（2014-09-15）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _player(playerID) {
            var player = G_Prg.$(playerID);
            if (G_Cookie.getOffMedia() === 'off') {
                player.pause();
                return;
            }
            //如果音频文件正在播放，则 paused 属性返回 false，并且调用 pause 方法来暂停播放。
            //player.addEventListener('canplay',function(){
            if (player.paused) {
                player.play();
            } else {
                player.pause();
                player.play();
                //通过更改 currentTime 的值，你可以快进或快退或重新启动播放。
            }
            //});

        }

        /********************************************************************************
         功能：“不会”按钮的单击事件
         输入参数：curTest 当前试题,dragIndex 滑动层索引
         返回值：无
         最后修改人：黎萍（2016-07-13）
         修改记录：无
         *******************************************************************************/
        function _cantDoClick(curTest, dragIndex) {
            var isBuy = 0;
            var allTestID = curTest.allTestID;
            if (G_Prg.checkVipApp()) {
                isBuy = 1;
            }
            // G_maiDian.unable_countClickCount(isBuy, allTestID);
            _gAllTest.setState('unable');
            _gAllTest.setUnableTest(curTest);
            if(_fromUrl !== 'myMessage'){
                _showCurTest(curTest, dragIndex);
            }
            var doExamNum = _gAllTest.getDoExamNumber(curTest.testNO - 1);
            if (doExamNum >= 1) {
                $('#doExamNum' + '_' + dragIndex).show();
            } else {
                $('#doExamNum' + '_' + dragIndex).hide();
            }

            $('#unableNum' + '_' + dragIndex).hide();
        }

        /********************************************************************************
         以下为章节练习试题单击事件处理代码部分
         *******************************************************************************/
        /********************************************************************************
         功能：填空题‘查看答案’按钮单击事件设置
         输入参数：curTest 当前试题,dragIndex 滑动层索引,flag 标记是否点击了查看答案按钮，取值为isLook
         返回值：无
         最后修改人：黎萍（2015-01-05）
         修改记录：黎萍（2015-08-06）控制在点击“查看答案”或文本框失去焦点时，只提交一次答题记录
         *******************************************************************************/
        function _seeTKTestAnswer(curTest, dragIndex, flag) {
            var idArr = _setID(curTest);
            var flagTemp = flag || 'noLook';
            _viewCount++;
            var inputAnswer = ''; //用户输入的答案
            var rightAnswers = curTest.answer.split('；');       //正确答案
            var trueCount = 0;  //计算用户输入的答案正确个数

            for (var i = 0; i < rightAnswers.length; i++) {
                if ($("#"+idArr['itemID'] + i + '_' + dragIndex).css('display') !== 'none') {
                    inputAnswer += $("#"+idArr['itemTextID'] + i + '_' + dragIndex).value + '；';
                    //用户输入的答案必须与正确答案的顺序一致
                    /*if($("#"+idArr['itemTextID'] + i + '_' +dragIndex).value === rightAnswers[i]){
                     trueCount++;   
                     }*/
                }
            }
            var answerType = curTest.answerType;
            var userReplys = inputAnswer.split('；');        //用户的答案数组
            //判断，如果数组的最后一个元素为空，则将其删除
            if (userReplys[userReplys.length - 1] === '') {
                userReplys.pop();
            }
            if (answerType === 0) {
                //用户输入的答案必须与正确答案的顺序一致
                for (var i = 0; i < rightAnswers.length; i++) {
                    if (userReplys[i] === rightAnswers[i]) {
                        trueCount++;
                    }
                }
            } else if (answerType === 1) {
                //用户输入的答案与正确答案的顺序不用一致
                for (var i = 0; i < userReplys.length; i++) {
                    for (var j = 0; j < rightAnswers.length; j++) {
                        if (userReplys[i] === rightAnswers[j]) {
                            trueCount++;
                        }
                    }
                }
            }
            var isRight = 1;  //标记用户的答案是否正确
            if (trueCount >= rightAnswers.length) {
                isRight = 0;    //回答正确
            }
            if (flagTemp === 'isLook') {
                _gAllTest.setSelected(0);
            } else if (flagTemp === 'noLook') {
                _gAllTest.setSelected(1);//标记章节练习的简答题已输入内容未点击查看答案：1 已输入 0 已提交查看答案
            }
            if (_fromUrl === 'mockExam') {
                _selected = 1;
                _gAllTest.setState('mock');
            }
            _gAllTest.setState('commited');

            //将得到的用户数据存放入结构体当中
            _gAllTest.setUserReply(inputAnswer);
            _gAllTest.setIsRight(isRight);
            if (_viewCount === 1) {
                _addReplyLog(curTest, isRight, inputAnswer);    //添加答题明细记录
            }
        }

        /********************************************************************************
         函数名：_seeJDTestAnswer
         功能：对简答题，填空题，点击提交答案，在试题下方显示正确答案及解题思路
         输入参数:answerID 正确答案所在div层ID;resultID 显示正确答案和解题思路的DIV层id
         返回值：无
         创建信息：黎萍（2014-05-21）
         修改记录：黎萍（2014-05-22）修改答题后展示的答题信息样式
         修改记录：黎萍（2014-06-09）修改正确答案展示样式
         修改记录：黎萍（2014-07-15）修改答题模式，更改为查看答案，不进行用户答案的正确与否判断
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         黎萍（2015-08-06）控制在点击“查看答案”或文本框失去焦点时，只提交一次答题记录
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _seeJDTestAnswer(curTest, content) {
            _viewCount++;
            var isRight = 1;  //标记用户的答案是否正确
            if (content === curTest.answer) {
                isRight = 0;    //标记用户回答错误
            }
            if (_fromUrl === 'mockExam') {
                _selected = 1;
                _gAllTest.setState('mock');
            } else {
                _gAllTest.setState('commited');
            }
            //将得到的用户数据存放入结构体当中
            //_gAllTest.setUserReply(content);
            _gAllTest.setIsRight(isRight);

            if (_viewCount === 1) {
                _addReplyLog(curTest, isRight, content);    //添加答题明细记录
            }
        }

        /********************************************************************************
         函数名：_radioClick
         功能：单选按钮的单击事件，立即判断用户选择的答案是否正确
         输入参数: itemNameID 选项所在的a标签的ID; itemTextID 选项的文本内容所在的span标签的ID; resultID 显示正确答案和解题思路的div层的ID
         selectedAnswer 用户选中的答案 ;
         返回值：无
         创建信息：黎萍（2014-06-06）
         修改记录：黎萍（2014-06-09）修改判断题的答题功能
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _radioClick(curTest, selectedAnswer, dragIndex) {
            //var curTest = _gAllTest.getCurTest(); //当前试题
            var isRight = 0; //标记用户的答案是否正确
            if (selectedAnswer === curTest.answer) {
                isRight = 0; //回答正确
                //_player('rightMedia');
            } else {
                isRight = 1; //回答错误
                //_player('wrongMedia');
            }
            //将得到的用户数据存放入结构体当中
            if (_gAllTest.getUserReply(curTest.testNO - 1) !== selectedAnswer) {//当用户多次点击一个选项时，控制不进行答题记录的提交
                _addReplyLog(curTest, isRight, selectedAnswer); //添加答题明细记录  
            }
            _gAllTest.setUserReply(selectedAnswer);
            _gAllTest.setState('commited');
            _gAllTest.setIsRight(isRight);
            if(_fromUrl !== 'myMessage'){
                _showCurTest(curTest, dragIndex);
            }
        }

        /********************************************************************************
         函数名：_submitCheckboxClick
         功能：提交答案的按钮的单击事件，提交多选题中选择的答案事件
         输入参数:itemNameID 选项所在的a标签的ID; itemTextID 选项的文本内容所在的span标签的ID;
         resultID 显示正确答案和解题思路的div层的ID;
         返回值：无
         创建信息：黎萍（2014-06-06）
         修改记录：黎萍（2014-06-10）修改多选答案的提交功能
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _submitCheckboxClick(curTest, itemNameID, dragIndex) {
            _selected = 0;
            _gAllTest.setSelected(0);//标记章节练习的多选题已被选中，但是没有进行答案的提交；1 已选中 0 已提交
            var isRight = 0;
            var selectedAnswer = ''; //用户选择的答案
            var selectIndex = ''; //用户选择的选项索引
            var answerIndex = ''; //正确答案的索引
            var itemLen = curTest.selectedItems.length; //选项数组长度

            for (var i = 0; i < itemLen; i++) {
                var className = $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class').split(' ')[1];
                if (className === 'radioSelected' || className === 'radioRight' || className === 'radioError') {
                    selectedAnswer += $("#"+itemNameID + i + '_' + dragIndex).attr('lang');
                    selectIndex += i + ','; //取得当前选中的checkbox的索引
                }
                if (curTest.answer.indexOf($("#"+itemNameID + i + '_' + dragIndex).attr('lang')) >= 0) {
                    answerIndex += i + ','; //取得正确答案的checkbox的索引
                }
            }
            var uIndex = selectIndex.split(','); //将用户选择的选项索引截取生成数组
            var aIndex = answerIndex.split(','); //将正确答案所在选项的索引截取生成数组
            //判断，如果数组的最后一个元素为空，则将其删除
            if (uIndex[uIndex.length - 1] === '') {
                uIndex.pop();
            }
            if (aIndex[aIndex.length - 1] === '') {
                aIndex.pop();
            }
            if (selectedAnswer === curTest.answer) {
                isRight = 0; //回答正确
                //_player('rightMedia');
            } else {
                isRight = 1; //回答错误
                //_player('wrongMedia');
            }
            //将得到的用户数据存放入结构体
            //if(_gAllTest.getUserReply(curTest.testNO-1) !== selectedAnswer){//当用户多次点击一个选项时，控制不进行答题记录的提交
            _addReplyLog(curTest, isRight, selectedAnswer); //添加答题明细记录  
            //}
            _gAllTest.setUserReply(selectedAnswer);
            _gAllTest.setState('commited');
            _gAllTest.setIsRight(isRight);
            if(_fromUrl !== 'myMessage'){
                _showCurTest(curTest, dragIndex);
            }
        }

        /********************************************************************************
         以下为模拟考场试题单击事件处理代码部分
         *******************************************************************************/
        /********************************************************************************
         函数名：_radioSelected
         功能：（模拟考场）单选题的单击事件，改变选项的图标，标记为已被选中
         输入参数:itemNameID 选项所在的a标签的ID;selectedValue 用户选中的答案
         返回值：无
         创建信息：黎萍（2014-07-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _radioSelected(curTest, itemNameID, selectedValue, dragIndex) {
            var selectedAnswer = ''; //用户选择的答案
            var isRight = 1;
            var itemLen = curTest.selectedItems.length;
            for (var i = 0; i < itemLen; i++) {
                $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault'); //选中之前先将其他的样式修改为默认的灰色，实现单击效果
                if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === selectedValue) {
                    var selectClassName = $("#"+itemNameID + i + '_' + dragIndex).attr('class') ? 'undefined' : 'radioDefault';
                    //使用三元运算符进行判断，如果选项的样式是默认的，则使用选中样式标记改选项为已选中；如果选项的样式已经是已选中的，则修改为默认的表示已经取消选择
                    var className = (selectClassName === 'radioSelected') ? 'radioDefault' : 'radioSelected';
                    $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault ' + className);
                }
                if ($("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class').split(' ')[1] === 'radioSelected') {
                    selectedAnswer = $("#"+itemNameID + i + '_' + dragIndex).attr('lang');
                }
                if (selectedAnswer === curTest.answer) {
                    isRight = 0;
                }
            }
            _selected = 1;
            _gAllTest.setIsRight(isRight);
            _gAllTest.setUserReply(selectedAnswer);
            _gAllTest.setState('mock');
        }

        /********************************************************************************
         函数名：_checkboxSelected
         功能：（模拟考场）复选框的单击事件，改变选项的图标，标记为已被选中
         输入参数:itemNameID 选项所在的a标签的ID;selectedValue 用户选中的答案
         返回值：无
         创建信息：黎萍（2014-06-06）
         修改记录：无
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _checkboxSelected(curTest, itemNameID, selectedValue, dragIndex) {
            var selectedAnswer = ''; //用户选择的答案
            var isRight = 1;
            var itemLen = curTest.selectedItems.length;
            for (var i = 0; i < itemLen; i++) {
                var optionID = $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0);//ABCD所在的标签
                var optionID2 = $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(1);//选项内容所在的标签
                if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === selectedValue) {
                    var className = '';
                    if (optionID.attr('class').indexOf(' ') === -1) {
                        className = 'checkboxDefault';
                    } else {
                        className = optionID.attr('class').split(' ')[1];
                    }

                    //提交答案后，再答题，点击取消当前答案图标为默认图标
                    if (className === 'radioRight') {
                        optionID.attr('class','checkboxDefault');
                        optionID2.attr('class','itemContent rightAnswer');
                    } else if (className === 'radioError') {
                        optionID.attr('class','checkboxDefault');
                        optionID2.attr('class','itemContent errorAnswer');
                    } else {
                        //使用三元运算符进行判断，如果选项的样式是默认的，则使用选中样式标记改选项为已选中；如果选项的样式已经是已选中的，则修改为默认的表示已经取消选择
                        var className1 = (className === 'radioSelected') ? 'checkboxDefault' : 'radioSelected';
                        optionID.attr('class','checkboxDefault ' + className1);
                    }
                }
                var selectClassName = $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class').split(' ')[1]
                if (selectClassName === 'radioSelected' || selectClassName === 'radioRight' || selectClassName === 'radioError') {
                    selectedAnswer += $("#"+itemNameID + i + '_' + dragIndex).attr('lang');
                }
            }
            if (selectedAnswer === curTest.answer) {
                isRight = 0;
            }
            if (_fromUrl === 'mockExam') {
                _selected = 1;
                //_setState('mock');
            } else {
                _gAllTest.setSelected(1);//标记章节练习的多选题已被选中，但是没有进行答案的提交；1 已选中 0 已提交
            }
            _gAllTest.setIsRight(isRight);
            _gAllTest.setUserReply(selectedAnswer);
        }

        /********************************************************************************
         以下为模拟考场显示试题已答情况处理代码部分
         *******************************************************************************/
        /********************************************************************************
         函数名：_mockCheckboxDone
         功能：多选题已做题设置
         输入参数:itemNameID 选项所在的a标签的ID;
         返回值：无
         创建信息：黎萍（2014-07-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _mockCheckboxDone(curTest, idArr, dragIndex) {
            if (_IsShowUserAnswer || _gAllTest.getSelected(_gAllTest.getCurIndex()) === 1 || _fromUrl === 'mockExam') {
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                var itemLen = curTest.selectedItems.length; //选项数组长度
                var itemNameID = idArr['itemID'];
                for (var i = 0; i < itemLen; i++) {
                    for (var j = 0; j < userReply.length; j++) {
                        if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === userReply.substr(j, 1)) {
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','checkboxDefault radioSelected');
                        }
                    }
                }
            }
        }

        /********************************************************************************
         函数名：_mockRadioDone
         功能：单选题已做题设置
         输入参数: curTest 当前试题,idArr 页面标签id哈希表,dragIndex 滑动层索引
         返回值：无
         创建信息：黎萍（2014-07-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _mockRadioDone(curTest, idArr, dragIndex) {
            if (_IsShowUserAnswer) {
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                var itemLen = curTest.selectedItems.length; //选项数组长度
                var itemNameID = idArr['itemID'];
                for (var i = 0; i < itemLen; i++) {
                    if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === userReply) {
                        $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault radioSelected');
                    }
                }
            }
        }

        /********************************************************************************
         功能：模拟考场设置显示填空题已做题信息
         输入参数：curTest 当前试题,idArr 页面标签id哈希表,dragIndex 滑动层索引
         返回值：无
         最后修改人：黎萍（2015-01-07）
         修改记录：无
         *******************************************************************************/
        function _mockTkDone(curTest, idArr, dragIndex) {
            if (_IsShowUserAnswer) {
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                var userReplys = userReply.split('；');      //正确答案
                //判断，如果数组的最后一个元素为空，则将其删除
                if (userReplys[userReplys.length - 1] === '') {
                    userReplys.pop();
                }
                for (var i = 0; i < userReplys.length; i++) {
                    $("#"+idArr['itemTextID'] + i + '_' + dragIndex).val(userReplys[i]);
                }
            }
        }

        /********************************************************************************
         功能：模拟考场设置显示简答题、填空题已做的试题信息
         输入参数：curTest 当前试题,idArr 页面标签id哈希表,dragIndex 滑动层索引
         返回值：无
         最后修改人：黎萍（2016-04-13）
         修改记录：无
         *******************************************************************************/
        function _mockJDDone(curTest, idArr, dragIndex) {
            if (_IsShowUserAnswer) {
                var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
                if (userReply) {
                    var replyInfo = '<div id="usersAnswer_' + dragIndex + '" class="noteTxt">' + userReply + '<span id="updateBtn_'
                        + dragIndex + '" class="default-btn result_btn">修改答案</span></div>';
                    $('#usersAnswers' + '_' + dragIndex).html(replyInfo);
                    $("#"+idArr['buttonID'] + '_' + dragIndex).css('display','none');;
                    var lists = $('#test_result' + '_' + dragIndex).find('.result_exp');
                    if (_IsDisabled) {
                        for (var i = 0; i < lists.length; i++) {
                            lists.eq(i).hide();
                        }
                    } else {
                        for (var i = 0; i < lists.length; i++) {
                            lists.eq(i).show();
                        }
                    }

                    $('#usersAnswers_list' + '_' + dragIndex).css('display','block');
                    $('#test_result' + '_' + dragIndex).css('display','block');

                    if (curTest.testType === 'JDTEST') {
                        $('#jd_exam' + '_' + dragIndex).find('.conDiv').eq(0).css('height','1px');
                    } else if (curTest.testType === 'TKTEST') {
                        $('#tk_exam' + '_' + dragIndex).find('.conDiv').eq(0).css('height','1px');
                    }
                    $('#updateBtn' + '_' + dragIndex).unbind("click").click(function () {
                        // if (typeof(G_maiDian) !== 'undefined') {
                        //     G_maiDian.fc_answerClickCount('修改答案');
                        // }
                        if (!_IsDisabled) {
                            return;
                        }
                        _addUserTestInfos('addAnswer', '修改答案');
                    });
                }
            }
        }

        /********************************************************************************
         函数名：_checkboxDone
         功能：多选题已做题设置
         输入参数:itemNameID 选项所在的a标签的ID; itemTextID 选项的文本内容所在的span标签的ID;
         resultID 显示正确答案和解题思路的div层的ID ;
         返回值：无
         创建信息：黎萍（2014-06-11）
         修改记录：无
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _checkboxDone(curTest, idArr, dragIndex) {
            if (!_IsShowRightAndWrong) {
                return;
            }
            var itemNameID = idArr['itemID']; //选项所在的a标签的ID

            var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
            var isRight = _gAllTest.getIsRight(curTest.testNO - 1); //获取标记用户的回答是否正确
            var selectIndex = ''; //用户选择的选项索引
            var answerIndex = ''; //正确答案的索引
            var itemLen = curTest.selectedItems.length; //选项数组长度
            var uIndex = []; //将用户选择的选项索引截取生成数组
            var aIndex = []; //将正确答案所在选项的索引截取生成数组
            //用户已经进行了做题操作
            if (userReply !== '') {
                for (var i = 0; i < itemLen; i++) {
                    if (userReply.indexOf($("#"+itemNameID + i + '_' + dragIndex).attr('lang')) >= 0) {
                        selectIndex += i + ','; //取得当前选中的checkbox的索引
                    }
                    if (curTest.answer.indexOf($("#"+itemNameID + i + '_' + dragIndex).attr('lang')) >= 0) {
                        answerIndex += i + ','; //取得正确答案的checkbox的索引
                    }
                }
                uIndex = selectIndex.split(',');
                aIndex = answerIndex.split(',');
                //判断，如果数组的最后一个元素为空，则将其删除
                if (uIndex[uIndex.length - 1] === '') {
                    uIndex.pop();
                }
                if (aIndex[aIndex.length - 1] === '') {
                    aIndex.pop();
                }
                //初始将所有正确答案的字体颜色变为绿色
                for (var a = 0; a < aIndex.length; a++) {
                    $("#"+itemNameID + aIndex[a] + '_' + dragIndex).find('span').eq(0).attr('class','checkboxDefault');
                    $("#"+itemNameID + aIndex[a] + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer');
                }
                for (var u = 0; u < uIndex.length; u++) {
                    if (curTest.answer.indexOf($("#"+itemNameID + uIndex[u] + '_' + dragIndex).attr('lang')) >= 0) { //用户答案中包含了正确的答案
                        $("#"+itemNameID + uIndex[u] + '_' + dragIndex).find('span').eq(0).attr('class','checkboxDefault radioRight');
                        $("#"+itemNameID + uIndex[u] + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer');
                    } else {
                        $("#"+itemNameID + uIndex[u] + '_' + dragIndex).find('span').eq(0).attr('class','checkboxDefault radioError');
                        $("#"+itemNameID + uIndex[u] + '_' + dragIndex).find('span').eq(1).attr('class','itemContent errorAnswer');
                    }
                }
            }
        }

        /********************************************************************************
         函数名：_radioDone
         功能：单选题已做题设置
         输入参数: itemNameID 选项所在的a标签的ID; itemTextID 选项的文本内容所在的span标签的ID;
         返回值：无
         创建信息：黎萍（2014-06-11）
         修改记录：黎萍（2014-07-23）修改当以模拟考场进入做题界面时，单选题以选中样式展示
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _radioDone(curTest, idArr, dragIndex) {
            if (!_IsShowRightAndWrong) {//_IsShowRightAnswer
                return;
            }
            var itemNameID = idArr['itemID'];
            var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
            var isRight = _gAllTest.getIsRight(curTest.testNO - 1); //获取标记用户的回答是否正确
            var itemLen = curTest.selectedItems.length; //选项数组长度
            if (userReply !== '') {
                if (isRight === 0) { //用户回答正确
                    for (var i = 0; i < itemLen; i++) {
                        if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === userReply) {
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault radioRight'); //指定类样式
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer');
                        }
                    }
                } else { //回答错误
                    for (var i = 0; i < itemLen; i++) {
                        if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === userReply) {
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault radioError'); //显示当前被判定为错的图片
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(1).attr('class','itemContent errorAnswer');
                        }
                        if ($("#"+itemNameID + i + '_' + dragIndex).attr('lang') === curTest.answer) {
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(0).attr('class','radioDefault radioDefault'); //改变正确答案的字体样式
                            $("#"+itemNameID + i + '_' + dragIndex).find('span').eq(1).attr('class','itemContent rightAnswer'); //改变正确答案的字体样式
                        }
                    }
                }
            }
        }

        /********************************************************************************
         函数名：_textInputed
         功能：简答题和填空题的已做题显示设置
         输入参数: itemTextID 用户输入的文本内容所在的textarea标签的ID;answerID 正确答案所在div层的id
         返回值：无
         创建信息：黎萍（2014-06-11）
         修改记录：无
         *******************************************************************************/
        function _textInputed(curTest, idArr, dragIndex) {
            if (!_IsShowRightAndWrong) {
                return;
            }
            var userReply = _gAllTest.getUserReply(curTest.testNO - 1); //获取用户的答案
            if (userReply) {
                var replyInfo = '<div id="usersAnswer_' + dragIndex + '" class="noteTxt">' + userReply + '<span id="updateBtn_'
                    + dragIndex + '" class=" default-btn result_btn">修改答案</span></div>';
                $('#usersAnswers_' + dragIndex).html(replyInfo);
                $('#usersAnswers_list' + '_' + dragIndex).show();
                $("#"+idArr['buttonID'] + '_' + dragIndex).hide();
                if (curTest.testType === 'JDTEST') {
                    $('#jd_exam' + '_' + dragIndex).find('.conDiv').eq(0).css('height','1px');
                } else if (curTest.testType === 'TKTEST') {
                    $('#tk_exam' + '_' + dragIndex).find('.conDiv').eq(0).css('height','1px');
                }
                $('#updateBtn_' + dragIndex).unbind("click").click(function () {
                    // if (typeof(G_maiDian) !== 'undefined') {
                    //     G_maiDian.fc_answerClickCount('修改答案');
                    // }
                    if (!_IsDisabled) {
                        return;
                    }
                    _addUserTestInfos('addAnswer', '修改答案');
                });
            } else {
                $('#usersAnswers_list' + '_' + dragIndex).hide();
            }
        }

        /********************************************************************************
         函数名：_hiddenTestSelects
         功能：背题模式下：隐藏其它非正确的选项、统计数据、我的笔记、用户解析
         输入参数:curTest 当前试题,dragIndex 拖拽层的索引
         返回值：无
         创建信息：黎萍（2014-08-20）
         修改记录：黎萍（2014-04-12）简答题的控制
         审查人：无
         *******************************************************************************/
        function _hiddenTestSelects(curTest, dragIndex) {
            if (_gAllTest.getState(curTest.testNO - 1) !== 'recite') {
                return;
            }
            var idArr = _setID(curTest);
            //隐藏提交答案按钮：多选题、简答题、填空题
            if (curTest.testType === 'XTEST' || curTest.testType === 'JDTEST' || curTest.testType === 'TKTEST' || curTest.subTestType === '不定项' || curTest.subTestType === '多项') {
                $("#"+idArr['buttonID'] + '_' + dragIndex).hide();  //隐藏提交答案按钮
            }

            //统计数据、我的笔记、用户解析、我的答案（简答题、填空题）
            var lists = $('#test_result' + '_' + dragIndex).find('.result_exp');
            for (var i = 0; i < lists.length; i++) {
                lists.eq(i).hide();
            }
            $('#testAnswers_list_' + dragIndex).show();
            $('#explain_list_' + dragIndex).show();

            //设置按钮的显示，事件控制
            var operate = $('#operateTestBtn_' + dragIndex);    //隐藏答案按钮的div层ID
            operate.show(); //显示隐藏答案按钮
            if (_gAllTest.getAction(curTest.testNO - 1) === 'reciteWithAnswer') {   //隐藏按钮显示
                operate.html('隐藏答案');
            } else {    //查看按钮显示
                operate.html('显示答案');
            }
            operate.unbind("click").click(function () {
                // if (typeof(G_maiDian) !== 'undefined') {
                //     G_maiDian.fc_answerClickCount('显示/隐藏答案');
                // }
                if (operate.html() === '显示答案') {
                    G_UserAction.addUserAction('reciteWithBtn');
                    _gAllTest.setAction('reciteWithAnswer');
                    operate.html('隐藏答案');
                } else {
                    G_UserAction.addUserAction('reciteNoBtn');
                    _gAllTest.setAction('reciteNoAnswer');
                    operate.html('显示答案');
                }
                _init(0);
            });
            _setCss();
        }

        /********************************************************************************
         函数名：_showKJCYEnterBtn
         功能：会计从业押题版、保过版的模拟考场时，最后一题设置显示进入下一套试卷按钮的显示
         输入参数：无
         返回值：无
         创建信息：黎萍（2016-03-29）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showKJCYEnterBtn(curTest, dragIndex) {
            if (_fromUrl === 'mockExam' && (_appEName === 'CJ_KJCY_DSHYY_BGB' || _appEName === 'CJ_KJCY_DSHYY_YTB')) {
                var testTotal = _gAllTest.getTestCount();   //试题总数
                var userID = G_Cookie.getUserID();
                //会计从业模拟考场回答到最后一题，显示“进入下一场考试”按钮
                if (curTest.testNO === testTotal && userID && _checkIsBuySoft()) {
                    if (!_gAllTest.isShowEnterBtn()) {
                        return;
                    }
                    $('#enterTesting_' + dragIndex).show();
                    $('#enterTesting_' + dragIndex).onclick = function () {
                        G_Prg.confirm('是否进入下一套试卷吗？', function () {
                            _gAllTest.enterNextTest();
                        });
                    };
                }
                var KJCY_data = _gAllTest.getKJCYData();
                if (KJCY_data !== 0 && KJCY_data.arrAllTest[0].state === 'marked') {
                    $('#marking').hide();
                    $('#retake').show();
                }
            }
        }

        /********************************************************************************
         函数名：_showTitleCard
         功能：显示题卡
         输入参数: 无
         返回值：无
         创建信息：黎萍（2014-07-24）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showTitleCard(dragIndex) {
            $('#cardDialog').html('');
            G_Prg.htmlContent('100%', '100%', '', '', true);//弹出窗口，把html移动到弹出框，动态添加
            $('#hcdialogBody').html(_cardHtml);
            $('#hcdvMsgBackBtn').show();
            $('#hcdvMsgBackText').html('题卡');
            $('#hcdvMsgClose').hide();
            $('#hcdialogBody').css({'margin-top':'40px'});
            $('#hcdvMsgBackText').css({'float':'left'});
            _createTitleCard(); //创建题卡
            $('#testMenu').hide();
            if (G_Cookie.getNightMode()) {
                $('#hcdvMsgBox').css('background-color','#152d35');
                $('#hcdvMsgBox').css('border-radius','0px');
            }
            $('#hcdvMsgBox').css('border-radius','0px');
            var curTest = _gAllTest.getCurTest();
            if (!_IsDisabled && _gAllTest.getState(curTest.testNO - 1) === 'marked') {
                $('#cardPY').html('重考');
                $('#cardPY').unbind("click").click(function () {
                    G_UserAction.addUserAction('cardRetakeBtn');
                    _reloadTest(dragIndex);
                });
            }
            if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {
                $('#cardPY').html('答题');
                $('#cardPY').unbind("click").click(function () {
                    G_DialogContent.dispose();  //关闭弹出层
                    G_UserAction.addUserAction('cardDoBtn');
                    _reciteOrDoTest('do');
                });
            }
        }

        /********************************************************************************
         函数名：_createTitleCard
         功能：创建题卡
         输入参数: 无
         返回值：无
         创建信息：黎萍（2014-07-09）
         修改记录：黎萍（2015-10-26）题卡布局调整
         修改记录：陶云（2016-3-22）添加会计从业保过版和押题班判断
         审查人：无
         *******************************************************************************/
        function _createTitleCard() {
            var contentID = 'cardContent';
            $('#'+contentID).html('');  //生成题卡之前，先将展示题卡的面板清空，防止题卡追加
            var arrAllTest = _gAllTest.getArrAllTest();
            for (var i = 0; i < arrAllTest.length; i++) {
                var cardDivTag = $('<div></div>'); //同一题型归置在一个div
                cardDivTag.attr('id','ID_' + arrAllTest[i].type);
                var ulTag = '';
                if (!($('#ID_' + arrAllTest[i].type).length)) {
                    var titleType = $('<div></div>');  //题型名称所在的div
                    titleType.attr('class','carType');
                    titleType.html(arrAllTest[i].style);

                    ulTag = $('<ul></ul>');   //题卡列表
                    ulTag.attr('id','ulId_' + arrAllTest[i].type);

                    cardDivTag.append(titleType);
                    cardDivTag.append(ulTag);
                    $("#" + contentID).append(cardDivTag);
                }
                var userReply = arrAllTest[i].userReply; //用户的答案
                var isRight = arrAllTest[i].isRight; //是否回答正确
                var selected = arrAllTest[i].selected;  //记录当前试题选项是否已被选中，但是没有进行答案的提交
                var liTag = $('<li></li>');
                //用户的答案不为空，说明用户进行了选择，则修改题卡的样式为被选中的样式
                if (userReply !== '') {
                    if (isRight === false || _selected === 1 || selected === 1) {
                        liTag.attr('class','card_Answered');   //用户选择了答案，并未提交答案
                    } else if (isRight === 0) {
                        liTag.attr('class','card_Right'); //回答正确，则调用正确的样式
                    } else if (isRight === 1) {
                        liTag.attr('class','card_Error'); //回答错误，则调用错误的样式
                    }
                } else {
                    liTag.attr('class','card_NoAnswer');
                }
                var curTest = _gAllTest.getCurTest(); //当前试题
                if (arrAllTest[i].testNO === curTest.testNO) {
                    liTag.css('border','1px solid #4093DA');
                }
                liTag.attr('id',arrAllTest[i].testNO);    //将试题编号设置为li标签的ID
                liTag.unbind("click").click(function () {
                    $('body').css('overflow','auto');
                    G_DialogContent.dispose();
                    _testNOClick($(this).attr('id'));
                });
                liTag.html(((_curPage - 1) * 50 + arrAllTest[i].testNO)); //将试题编号
                $('#ulId_' + arrAllTest[i].type).append(liTag);
            }

            // var cardSpace = $('<div></div>');
            // cardSpace.attr('id','cardSpace');
            // cardSpace.css({'width':'95%','height':'50px','float':'left'});
            // $("#"+contentID).append(cardSpace);

            // var cardPYBg = $('<div></div>');
            // cardPYBg.attr('id','cardPYBg');
            // cardPYBg.attr('class','cardPYBg');
            // $("#"+contentID).append(cardPYBg);
            // var cardPY = $('<div></div>');
            // cardPY.attr('id','cardPY');
            // cardPY.attr('class','default-btn');
            // cardPY.css({'width':'95%','position':'fixed','bottom':'10px','margin-left': '2%','font-size':'16px'});

            // if (_fromUrl === 'mockExam') {
            //     cardPY.html('提交批阅');
            //     cardPY.unbind("click").click(function () {
            //         G_UserAction.addUserAction('cardMarkBtn');
            //         //G_DialogContent.dispose();
            //         _markingClick();
            //     });
            //     if (_appEName === 'CJ_KJCY_DSHYY_YTB' || _appEName === 'CJ_KJCY_DSHYY_BGB') {
            //         if (!_gAllTest.isShowEnterBtn()) {
            //             $("#"+contentID).append(cardPY);
            //             return;
            //         }
            //         var readWrongInfos2 = $('<div></div>');
            //         readWrongInfos2.html('进入下一套试卷');
            //         readWrongInfos2.attr('id','card_enterTesting');
            //         readWrongInfos2.attr('class','cardPY');
            //         readWrongInfos2.css({'left':'50%','width':'45%','float':'right','border':'1px solid #ccc'});
            //         readWrongInfos2.unbind("click").click(function () {
            //             G_Prg.confirm('是否进入下一套试卷吗？', function () {
            //                 _gAllTest.enterNextTest();
            //             });
            //         });
            //         cardPY.attr('class','cardPY');
            //         cardPY.style.css({'width':'45%','float':'left','border':'1px solid #ccc','background-color':'#ff9900','color':'#fff'});
            //         $("#"+contentID).append(cardPY);
            //         $("#"+contentID).append(readWrongInfos2);
            //         return;
            //     }
            // } else {
            //     cardPY.html('查看成绩');
            //     cardPY.unbind("click").click(function () {
            //         G_UserAction.addUserAction('cardMarkBtn');
            //         //G_DialogContent.dispose();
            //         _showScore();
            //     });
            //     $("#"+contentID).append(cardPY);
            //     return;
            // }
            // $("#"+contentID).append(cardPY);
        }

        /********************************************************************************
         函数名：_testNOClick
         功能：设置题卡的单击事件
         输入参数: 无
         返回值：无
         创建信息：黎萍（2014-07-09）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _testNOClick(curTestNO) {
            $('#cardDialog').hide();
            _gAllTest.move(curTestNO - 1);  //设置当前试题编号
            _init('card');
        }

        /********************************************************************************
         函数名：_showTestMenuBar
         功能：点击做题界面右上角的图片，显示做题界面的菜单栏
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-07-08）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _showTestMenuBar(dragIndex) {
            var menu = $('#testMenu');
            // console.log(menu.css('display'));
            if (menu.css('display') === 'none') {
                menu.show();
            } else {
                menu.hide();
            }
            var curTest = _gAllTest.getCurTest();
            //背题模式，禁用批阅按钮
            if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {
                //G_Prg.$('marking').getElementsByTagName('span')[0].style.color = '#999';  //将按钮灰掉 
                $('#marking').unbind("click").click(function () {
                });
                //$('#retake').getElementsByTagName('span')[0].style.color = '#999';    //将按钮灰掉 
                $('#retake').unbind("click").click(function () {
                });
            } else {
                //$('#marking').getElementsByTagName('span')[0].style.color = '#fff';
                $('#marking').unbind("click").click(function () {
                    $('#testMenu').hide();
                    G_UserAction.addUserAction('markBtn');
                    _markingClick();
                });
                //$('#retake').getElementsByTagName('span')[0].style.color = '#fff';    
                $('#retake').unbind("click").click(function () {
                    G_UserAction.addUserAction('retakeBtn');
                    _reloadTest(dragIndex);//重考单击事件 
                });
            }
        }

        /********************************************************************************
         函数名：_goBackDir
         功能：返回章节目录界面
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-06-12）
         修改记录：黎萍（2014-06-16）增加评分界面退出功能
         修改记录：黎萍（2014-07-04）增加页面跳转参数sbjID 科目id,srcID 来源id
         韦友爱（2014-07-24）删除页面跳转参数sbjID 科目id,srcID 来源id 删除输入参数sbjID 科目id,srcID 来源id
         黎萍（2015-05-12）增加对视频返回做题页面后的路径处理
         黎萍（2016-03-31）修改页面返回控制：未答、已批阅退出答题页面进行提示
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _goBackDir() {
            _maiDianTestCount();//答题埋点
            var msg = '确定要退出答题界面？';
            var url = '';
            var pageType = G_Prg.getQueryString('pageType');
            // var testCount = G_Prg.getQueryString('testCount');
            // if(pageType){
            //     window.location.href = '/' + pageType +'?fromUrl=answerExam&testCount=' + testCount;
            // }
            if (_fromUrl === 'mockExam') {
                msg = '确定要退出模拟考场？';
                url = '/mockExam?fromUrl=answerExam';
            }
            if(_fromUrl === 'myMessage'){
                var type = G_Prg.getQueryString('type');
                if(type === 'connot'){
                    url = '/myMessage?fromUrl=answerExam&type=' + type;
                }else{
                    url = '/myMessage?fromUrl=answerExam';
                }
            }
            if (_replay === '1') {
                url = '/doExam-index?fromUrl=answerExam';
            }
            // if(_fromUrl === 'chapterThree'){
            //  url = '/moduleExam?fromUrl=answerExam';
            // }
            // 相关考点
            if(_fromUrl === 'Five'){
                url = '/Five?fromUrl=answerExam&chapterID='+G_Prg.getQueryString('chapterID')+'&chapterName='+ decodeURI(_GetQueryString('chapterName'));
            }
            if (!_fromUrl) {
                url = '/chapterThree?fromUrl=answerExam';
            }
            if (_fromUrl === 'chapterThree') {
                var m = G_Prg.getQueryString('m');
                var n = G_Prg.getQueryString('n');
                var title = decodeURI(_GetQueryString('title'));
                url = '/chapterThree?fromUrl=answerExam&value1='+ m +'&value2='+ n + '&title=' + title;
            }
            // 截取网址上传递的参数
            // function _GetQueryString(name) {  
            //     var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  
            //     var r = window.location.search.substr(1).match(reg);  //获取url中"?"符后的字符串并正则匹配
            //     var context = "";  
            //     if (r != null)  
            //          context = r[2];  
            //     reg = null;  
            //     r = null;  
            //     return context == null || context == "" || context == "undefined" ? "" : context;  
            // }
            G_Storage.removeSessionStorageValue('ArrAllTestID');
            G_Storage.removeSessionStorageValue('ArrAllTest');
            G_Storage.removeSessionStorageValue('ConfigJSON');
            G_Storage.removeSessionStorageValue('AllJsonTest');
            if (url) {
                if (_IsHandle === 1) {  //_IsHandle=0，则未进行答题或已批阅不进行退出提示；_IsHandle=1，则有答题操作
                    G_Prg.confirm(msg, function () {
                        _gAllTest.addReplyJson();
                        window.location.href = url;
                    });
                } else {
                    window.location.href = url;
                }
                return;
            }
            var type = G_Prg.getQueryString('type');
            var redoSwitch = G_Prg.getQueryString('redoSwitch');
            if (_fromUrl === 'searchExam') {
                if (type === 'findTest') {
                    var keyWord = G_Prg.getQueryString('keyWord', true);
                    url = _fromUrl + '?fromUrl=answerExam&page=' + _curPage + '&keyWord=' + keyWord + '&type=' + type;
                } else {
                    if(redoSwitch){
                        url = pageType + '?fromUrl=answerExam&redoSwitch=' + redoSwitch;
                    }else{
                        url = pageType + '?fromUrl=answerExam';
                    }
                }
                // else if (type === 'noteRank') {
                //     var time = G_Prg.getQueryString('time', true);
                //     url = _fromUrl + '?fromUrl=answerExam&page=' + _curPage + '&time=' + time + '&type=' + type;
                // } else {
                //     url = _fromUrl + '?fromUrl=answerExam&page=' + _curPage + '&type=' + type;
                // }
            } else if (_fromUrl === 'video_play' || _fromUrl === 'yhyc') {
                url = '/yhyc?fromUrl=answerExam&page=' + _curPage;
            } else if (_fromUrl === 'comb') {
                url = '/comb?chapterID=' + G_Prg.getQueryString('chapterID');
            } else {
                url = _fromUrl + '?fromUrl=answerExam';
            }
            if (_IsHandle === 1) {  //_IsHandle=0，则未进行答题或已批阅不进行退出提示；_IsHandle=1，则有答题操作
                G_Prg.confirm(msg, function () {
                    _gAllTest.addReplyJson();
                    if (_fromUrl === 'mockExam') {
                        // G_Storage.removeSessionStorageValue('ConfigJSON');
                        G_Prg.removeCookie('CONFIGID_INDEX');
                        var userID = G_Cookie.getUserID();
                        for (var i = 0; i < _gAllTest.getConfigIDArr().length; i++) {
                            G_Storage.removeLocalStorageValue(userID + '_simulatedTestJson_' + i);
                        }
                    }
                    window.location.href = url;
                });
            } else {
                window.location.href = url;
            }
        }

        /********************************************************************************
         功能：点击批阅按钮，弹出提示：是否交卷评分，实现批阅功能
         输入参数：无
         返回值：无
         最后修改人：黎萍（2014-12-23）
         修改记录：点击背题模式，禁止再操作批阅
         黎萍（2015-11-24）从题卡中提交批阅后学习总结页面无法操作
         *******************************************************************************/
        function _markingClick() {
            // if (typeof(G_maiDian) !== 'undefined') {
            //     G_maiDian.fc_answerClickCount('批阅');//答题页面点击埋点
            // }
            var curTest = _gAllTest.getCurTest(); //当前试题
            //点击背题模式，禁止再操作批阅
            if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {//背题模式
                return;
            }
            var scoresjson = _gAllTest.calculateScores(); //接收分数的json数据
            var msg = '';
            if (scoresjson.doneNum === 0) {
                msg = '请您先答题，再批阅！';
                G_Prg.alert(msg);
                //G_DialogContent.dispose();
                //G_DialogContent.removeHtmlCover();
            } else {
                msg = '确定批阅试题？';
                G_Prg.confirm(msg, function () {
                    _maiDianTestCount();
                    _gAllTest.setState('marked', 1);
                    _selected = 0;
                    _IsHandle = 0;  //标记是否进行了试题的相关操作
                    var arrAllTest = _gAllTest.getArrAllTest();
                    //章节练习的多选题已被选中，但是没有进行答案的提交,在批阅后添加答题明细记录
                    for (var i = 0; i < arrAllTest.length; i++) {
                        if (arrAllTest[i].selected === 1) {
                            if (arrAllTest[i].isRight === 1 || arrAllTest[i].isRight === 0) {
                                _addReplyLog(_gAllTest.getTest(i), arrAllTest[i].isRight, arrAllTest[i].userReply);
                            }
                        }
                    }
                    for (var i = 0; i < arrAllTest.length; i++) {
                        if (arrAllTest[i].selected === 1) {
                            arrAllTest[i].selected = 0;//标记章节练习的多选题已被选中，但是没有进行答案的提交；1 已选中 0 已提交
                        }
                    }
                    if (_fromUrl === 'mockExam') {   //模拟考场在提交批阅时，统一将所有错题记录提交到数据库
                        //根据试题数量循环将错题信息插入到数据库中
                        for (var i = 0; i < arrAllTest.length; i++) {
                            if (arrAllTest[i].isRight === 1 || arrAllTest[i].isRight === 0) {
                                _addReplyLog(_gAllTest.getTest(i), arrAllTest[i].isRight, arrAllTest[i].userReply, 'yes');
                            }
                        }
                    }
                    G_DialogContent.dispose();
                    _showScore();
                }, function () {
                    G_DialogContent.removeHtmlCover();
                }); //确定交卷评分，显示评分弹出层
            }
        }

        /********************************************************************************
         功能：显示用户做题的总成绩
         输入参数：无
         返回值：无
         创建信息：黎萍（2016-04-19）
         修改记录：无
         *******************************************************************************/
        function _showScore() {
            G_Prg.htmlContent('100%', '100%', '', _showScoreLayer(), true);
            G_DialogContent.removeHtmlCover();
            // $('#hcdialogBody').css('background-color','#59a7f4');
            $('#hcdvMsgBackText').html('学习成绩');
            $('#hcdvMsgClose').hide();
            $('#hcdvMsgBackBtn').show();
            $('#hcdialogBody').css({'margin-top':'40px'});
            $('#hcdvMsgBackText').css({'float':'left'});
            G_Prg.$('hcdvMsgBackBtn').onclick = function () {
                _goBackDir();
            };

            _setCss();
            if (G_Cookie.getNightMode()) {
                $('#hcdvMsgBox').css('background','#152d35');
                $('#hcdvMsgBox').css('border-radius','0px');
            }
            $('#hcdvMsgBox').css('border-radius','0px');
            var pyHtml = $('#content').html();
            $('#hcdialogBody').html(pyHtml.replace('showExam', 'showExam2'));
            var btns = $('#showExam2').find('div');
            if (_fromUrl !== 'chapterThree') {    //不是章节练习进入做题页面的情况下，批阅界面的各个按钮显示控制
                btns.eq(0).html('查看答题情况');
                //会计从业的模拟考场显示进入下一场考试按钮
                if (_fromUrl === 'mockExam' && (_appEName === 'CJ_KJCY_DSHYY_BGB' || _appEName === 'CJ_KJCY_DSHYY_YTB')) {
                    btns.eq(1).html('进入下一套试卷');
                    btns.eq(1).unbind("click").click(function () {
                        _gAllTest.enterNextTest();
                    }); //进入下一场考试
                } else {
                    btns.eq(1).hide();
                }
            }
            //if (_fromUrl === 'mockExam') {
            if (_fromUrl!== 'chapterThree') {
                $('#hcdialogBody').find('.showExam').eq(1).hide();
            } else {
                btns.eq(1).unbind("click").click(function () {
                    _gAllTest.removeRecording();    //清除数据库中的答题记录
                    window.location.href = 'answerExam?fromUrl=chapterThree&myRedo=1&cptName=' + G_Prg.getQueryString('cptName', true);
                }); //重新答题
            }
            btns.eq(0).unbind("click").click(function () {
                $('body').css('overflow','auto');
                if ($(this).html() === '继续学习') {
                    G_DialogContent.dispose();
                } else {
                    _showDoneTest();
                    G_UserAction.addUserAction('markTestBackBtn');
                }
            }); //继续学习
            var btnListObj = $('#hcdialogBody').find('.showExam').eq(1).find('ul').eq(0).find('li');
            btnListObj.eq(0).unbind("click").click(function () {
                if ($(this).html().indexOf('（0）') >= 0) {
                    return;
                }
                window.location.href = 'answerExam?fromUrl=chapterThree&type=myError&cptName=' + G_Prg.getQueryString('cptName', true) + '&testNum=1000';
            }); //错题
            btnListObj.eq(1).unbind("click").click(function () {
                if ($(this).html().indexOf('（0）') >= 0) {
                    return;
                }
                window.location.href = 'answerExam?fromUrl=chapterThree&type=myNotDone&cptName=' + G_Prg.getQueryString('cptName', true) + '&testNum=1000';
            }); //未答
            btnListObj.eq(2).unbind("click").click(function () {
                if ($(this).html().indexOf('（0）') >= 0) {
                    return;
                }
                window.location.href = 'answerExam?fromUrl=chapterThree&type=myNote&cptName=' + G_Prg.getQueryString('cptName', true) + '&testNum=1000';
            }); //笔记
            btnListObj.eq(3).unbind("click").click(function () {
                if ($(this).html().indexOf('（0）') >= 0) {
                    return;
                }
                window.location.href = 'answerExam?fromUrl=chapterThree&type=myFav&cptName=' + G_Prg.getQueryString('cptName', true) + '&testNum=1000';
            }); //收藏
        }

        /********************************************************************************
         函数名：_showDoneTest
         功能：批阅界面，点击“查看全部解析”，返回到做题界面，显示已经做过的试题
         输入参数：flag 标记是否设置只显示错题信息
         返回值：无
         创建信息：黎萍（2014-06-12）
         修改记录：黎萍（2015-10-27）批阅界面，点击“查看错题解析”，返回做题页面显示做错（包含未做的）的试题
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _showDoneTest(flag) {
            $('#retake').show();
            $('#marking').hide();
            if (flag === 'showWrong') {
                var arrAllTest = _gAllTest.getArrAllTest();
                G_Storage.setSessionStorageValue('arrAllTest', arrAllTest);
                for (var i = 0; i < arrAllTest.length; i++) {
                    var isRight = arrAllTest[i].isRight;
                    if (isRight === 0) {    //判断将答对的试题从结构体数组中移除
                        arrAllTest.splice(i, 1);
                        i = -1;
                    }
                }
            }
            G_DialogContent.dispose();
            _gAllTest.move(0);  //设置当前试题编号
            _init(0);
            _setCss();
            _gFlipsnap.moveToPoint(0, 0);   //滑动到指定的层
        }

        /********************************************************************************
         函数名：_tipsBuySoft
         功能：对未充值用户试用完试题后，提示进行充值获取更多试题
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-06-19）
         修改记录：无
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _tipsBuySoft() {
            // if (typeof(G_maiDian) !== 'undefined') {
            //     G_maiDian.probationClickCount();//埋点用户试用
            // }
            var msg = '请充值购买，使用更多试题！';
            G_Prg.confirm(msg, function () {
                var userID = G_Cookie.getUserID();
                if (userID) {
                    var isiphone = G_Prg.getCookie('CLIENTTYPE');
                    if (isiphone && isiphone.toString().toLowerCase() === 'iphone') {
                        window.location = "ios://iOSiap";
                    } else {
                        window.location.href = '/recharge';
                    }
                } else {
                    //window.location.href = '../html/userLogin.html?fromUrl=answerExam';
                    window.location.href = '/login';
                }
            });
        }

        /********************************************************************************
         函数名：_checkIsBuy
         功能：判断用户当前浏览的科目是否在已购买的数组里面，否则提示用户进行购买
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-06-19）
         修改记录：无
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _checkIsBuySoft() {
            var isVip = _gAllTest.getIsVip();   //标记是否是VIP用户
            return isVip;
        }

        /********************************************************************************
         函数名：_checkUserTest
         功能：如果是从我的收藏、我的笔记、错题重做进入答题界面的，当点击到最后一题时，提示已到最后一题
         输入参数：无
         返回值：true 表示是从我的收藏、我的笔记、错题重做进入答题界面的
         创建信息：黎萍（2014-07-08）
         修改记录：韦友爱（2014-07-28）添加从章节最终列表也的我的收藏、我的笔记、错题重做按钮进入答题界面的判断
         审查人：无
         *******************************************************************************/
        function _checkUserTest() {
            if (_fromUrl === 'searchExam') {
                return true;
            }
            if (_fromUrl === 'chapterThree' && G_Prg.getQueryString('type')) {
                return true;
            }
        }

        /********************************************************************************
         函数名：_moveNext
         功能：点击下一题，再从json中读取数据展示在界面
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-05-19）
         修改记录：黎萍（2014-05-22）将试题编号作为参数传入
         韦友爱（2014-07-15）点击下一题时，将笔记内容清空，然后再init
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _moveNext() {
            var testCount = _gAllTest.getTestCount();   //总试题数
            var curIndex = _gAllTest.getCurIndex(); //当前试题索引
            if (_gAllTest.moveNext()) {
                if (curIndex === 0) {
                    _gFlipsnap.moveToPoint(1, 0);   //滑动到指定的层
                } else if (curIndex === (testCount - 2)) {
                    _gFlipsnap.moveToPoint(2, 0);   //滑动到指定的层
                } else {
                    _init(2);
                    _reflashDragControl(1); //刷新拖拽控件
                }
                _setFavTestInfos();
                _refreshNoteIcon();
                _setReplyLookTime();
            } else {
                if (_checkIsBuySoft() || _checkUserTest()) {
                    _setReplyLookTime(_gAllTest.getCurTest());
                    G_Prg.alert('已经是最后一题了！');
                } else {
                    _tipsBuySoft();
                }
            }
        }

        /********************************************************************************
         函数名：_movePre
         功能：点击上一题，再从json中读取数据展示在界面
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-05-19）
         修改记录：黎萍（2014-05-22）将试题编号作为参数传入
         韦友爱（2014-07-15）点击上一题时，将笔记内容清空，然后再init
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _movePre() {
            var testCount = _gAllTest.getTestCount();//总试题数
            var curIndex = _gAllTest.getCurIndex();//当前试题索引
            if (_gAllTest.movePre()) {
                if (curIndex === 1) {
                    _gFlipsnap.moveToPoint(0, 0);   //滑动到指定的层
                } else if (curIndex === (testCount - 1)) {
                    _gFlipsnap.moveToPoint(1, 0);   //滑动到指定的层
                } else {
                    _init(1);
                    _reflashDragControl(1); //刷新拖拽控件
                }
                _setFavTestInfos();
                _refreshNoteIcon();
                _setReplyLookTime();
            } else {
                G_Prg.alert("已经是第一题了！");
            }
        }

        /********************************************************************************
         函数名：_reloadTest
         功能：重考，清空用户答题记录
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-07-31）
         修改记录：黎萍（2015-03-18）点击重考按钮，恢复背题模式功能操作
         黎萍（2015-11-25）重考，清空数据库中用户答题记录
         审查人：无
         *******************************************************************************/
        function _reloadTest(dragIndex) {
            // if (typeof(G_maiDian) !== 'undefined') {
            //     G_maiDian.fc_answerClickCount('重考');//答题页面点击埋点
            // }
            $('#retake').hide();    //重考按钮隐藏
            $('#marking').show();   //批阅按钮再次出现
            $('#reciteTest').show();
            _maiDianTestCount();//答题统计埋点
            G_DialogContent.dispose();  //关闭弹出层
            //先清空结构体数组中用户的回答信息：隐藏正确答案与解析：恢复选项默认颜色：恢复选项的单击事件
            var arrAllTest = _gAllTest.getArrAllTest();
            for (var i = 0; i < arrAllTest.length; i++) {
                arrAllTest[i].userReply = '';
                arrAllTest[i].isRight = false;
            }
            _gAllTest.clearAction();
            _gAllTest.setState('uncommited', 1);
            _addNote = [];
            _gAllTest.move(0);  //跳转到第一题
            _init(0);
            _setCss();
            if (_fromUrl === 'mockExam') {//模拟考场禁止使用背题模式
                _showConfigJsonInfos();
            } else {
                _gAllTest.removeRecording();
            }

            _gFlipsnap.moveToPoint(0, 0);   //滑动到指定的层
        }

        /********************************************************************************
         函数名：_showScoreLayer
         功能：显示评分的提示遮罩层
         输入参数：无
         返回值：无
         创建信息：黎萍（2014-06-16）
         修改记录：黎萍（2014-06-26）修改对成绩评定的判断
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         黎萍（2014-12-08）控制及格率保留2位小数
         审查人：陈昊（2014-06-26）
         *******************************************************************************/
        function _showScoreLayer() {
            var scoresjson = _gAllTest.calculateScores(); //接收分数的json数据
            var correctRate = scoresjson.correctRate; //及格率
            var scoreText = ''; //成绩评定：不及格、及格、优秀
            //根据正确率设置成绩描述
            if (correctRate < 60) {
                scoreText = '不及格';
            } else if (correctRate < 90) {
                scoreText = '及格';
            } else {
                scoreText = '优秀';
            }
            var totalNum = scoresjson.testCount;
            var testNum = scoresjson.doneNum;
            var rightTestNum = scoresjson.rightNum;
            var allScore = scoresjson.allScore;
            var userScore = scoresjson.userScore;
            $('#doneNum').html(testNum + '/' + totalNum); //已做试题数
            $('#rightNum').html(rightTestNum); //答对试题数
            $('#correctRate').html(correctRate + '%'); //正确率
            $('#bar_yd').css('width',(Number(testNum / totalNum) * 100).toFixed(2) + '%');  //已答进度条
            $('#bar_dd').css('width',(Number(rightTestNum / testNum) * 100).toFixed(2) + '%');  //答对进度条
            $('#bar_zql').css('width',correctRate + '%');   //正确率进度条
            if (_fromUrl === 'mockExam') {
                $('#allScore').html('总分' + allScore); //满分
                $('#rightNum2').html(rightTestNum); //答对试题数
                $('#userScore').html(userScore); //得分
                $('#rightBar').show();
                $('#userDoTestScore').show();
                $('#doPractice').hide();
                $('#practiceCount').hide();
                $('.scoreTopRight').find('.score_barList').eq(2).css('width','96%');
            } else {
                $('#rightBar').hide();
                $('#userDoTestScore').hide();
                $('#doPractice').show();
            }
            if (_fromUrl !== 'chapterThree') {
                var infosArr = _checkInfos('no');
                if (!infosArr) {
                    return;
                }
                var cptName = $('#chaptername').html(); //章节名称
                var curTest = _gAllTest.getCurTest(); //当前试题
                var examType = _setExamType();
                _gAllTest.updateChapterHistory(curTest, infosArr['appID'], infosArr['userID'], cptName, totalNum, testNum, rightTestNum, _replyStartTime, examType, _viewCount, allScore, userScore);   //添加批阅数据到数据库中

            }
            var maxTime = _gAllTest.getMaxTestTime();
            if (!maxTime) {
                maxTime = new Date();
            }
            $('#practiceCount').html('最近答题时间&nbsp;&nbsp;' + G_Prg.datetimeFormat(new Date(maxTime), 'yyyy-MM-dd hh:mm:ss'));

            var errorNum = 0;
            var notNum = 0;
            var noteNum = 0;
            var favNum = 0;
            var testData = _gAllTest.getArrUserTest();
            var len = testData.length;
            for (var k = 0; k < len; k++) {
                //if(testData[k].IsRight === 1){
                //  errorNum++;
                //}
                if (testData[k].UserNote) {
                    noteNum++;
                }
                if (testData[k].IsFav === 1) {
                    favNum++;
                }
            }
            errorNum = testNum - rightTestNum;
            notNum = totalNum - testNum;
            if (notNum < 0) {
                notNum = 0;
            }
            $('#errorTestBtn').html('错题(' + errorNum + ')');
            $('#notTestBtn').html('未答(' + notNum + ')');
            $('#noteTestBtn').html('笔记(' + noteNum + ')');
            $('#favTestBtn').html('收藏(' + favNum + ')');
        }

        /********************************************************************************
         函数名：_addFav
         功能：添加收藏
         输入参数:无
         返回值：无
         创建信息：韦友爱（2014-07-02）
         修改记录：黎萍（2014-07-04）修改提示信息
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         审查人：无
         *******************************************************************************/
        function _addFav() {
            var infosArr = _checkInfos('yes');
            if (!infosArr) {
                return;
            }
            var curTest = _gAllTest.getCurTest(); //当前试题
            _gAllTest.addFav(curTest, infosArr['appID'], infosArr['userID'], infosArr['userName'], infosArr['guid']);
            G_Prg.popMsg('已收藏');
            _gAllTest.setFav(1);
            _setFavTestInfos();
        }

        /********************************************************************************
         函数名：_removeFav
         功能：取消收藏
         输入参数: 无
         返回值：无
         创建信息：韦友爱（2014-07-02）
         修改记录：黎萍（2014-07-04）修改提示信息
         黎萍（2014-08-01）抽取验证数据的部分封装成方法，使用返回参数数组的方式
         审查人：无
         *******************************************************************************/
        function _removeFav() {
            var infosArr = _checkInfos('yes');
            if (!infosArr) {
                return;
            }
            var curTest = _gAllTest.getCurTest(); //当前试题
            _gAllTest.removeFav(curTest, infosArr['appID'], infosArr['userID'], infosArr['userName'], infosArr['guid']);
            G_Prg.popMsg('已取消收藏');
            _gAllTest.setFav(0);
            _setFavTestInfos();
        }

        /********************************************************************************
         函数名：_setFavTestInfos
         功能：控制取消收藏按钮的显示与隐藏
         输入参数: 无
         返回值：无
         创建信息：黎萍（2014-07-04）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setFavTestInfos() {
            var fav = _gAllTest.getFav(_gAllTest.getCurIndex());
            var curTest = _gAllTest.getCurTest(); //当前试题
            var curFav = 0;
            if (fav === false) {
                curFav = curTest.isFav;
            } else {
                curFav = fav;
            }
            if (curFav === 1) {
                $('#removeFav').show();
                $('#fav').hide();
            } else {
                $('#removeFav').hide();
                $('#fav').show();
            }
        }

        /********************************************************************************
         函数名：_refreshNoteIcon
         功能：刷新底部笔记图标
         输入参数：无
         返回值：无
         创建信息：谢建沅（2014-08-19）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _refreshNoteIcon() {
            var curTest = _gAllTest.getCurTest(); //当前试题
            var userNote = _gAllTest.getUserNote(_gAllTest.getCurIndex());
            if (userNote === '') {
                userNote = curTest.userNote;
            }
            if (userNote) {
                $('#updateNote').show();
                $('#note').hide();
            } else {
                $('#updateNote').hide();
                $('#note').show();
            }
        }

        /********************************************************************************
         函数名：_feedbackWrongClick
         功能：纠错按钮的点击事件
         输入参数:dragIndex 当前滑动层索引
         返回值：无
         创建信息：黎萍（2016-01-20）
         修改记录：黎萍（2016-04-07）修改：当清空输入框内的值时，按钮颜色变成灰色、已输入值统计重置为0
         审查人：无
         *******************************************************************************/
        function _feedbackWrongClick(curTest,dragIndex) {
            var infosArr = _checkInfos('yes');
            if (!infosArr) {
                return;
            }
            var wrongItems = '';
            G_Prg.htmlContent('100%', '100%', '', '', true);//弹出窗口，把html移动到弹出框，动态添加
            $('#hcdvMsgBox').css({'border-radius':'0'});
            $('#hcdialogBody').html(_feedbackHtml);
            $('#hcdvMsgTitle').css('text-align','left');
            $('#hcdvMsgClose').hide();
            $('#hcdvMsgBackBtn').show();
            $('#hcdvMsgBackText').html('添加纠错');
            $('#hcdialogBody').css({'margin-top':'40px'});
            $('#hcdvMsgBackText').css({'float':'left'});
            $('#hcdialogBody').html(_feedbackHtml.replace('btn-feedback', 'btn-feedback2'));
            $('#btn-feedback2').html('<div class="input_count"><span id="feedback_inputCount">0</span>/500字</div><div class="feedback_msg" id="msg-feedback"></div><div class="feedback_btn" id="feedback_btn">提交</div>');

            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var selectObj = $('#hcdialogBody').find('.feedback-items-list').eq(0);
            selectObj.css('display','none');
            if(testType==='A3TEST'||testType==='BTEST') {
                if (subTestType === '不定项' || subTestType === '多项' || subTestType === '单项') {
                    selectObj.show()
                }
            }else if(testType==='ATEST'|| testType==='XTEST'||testType==='PDTEST'){
                selectObj.show()
            }

            var btnObj = $('#hcdialogBody').find('.feedback-items-list').eq(0).find('span').eq(1);
            var arrDivObj = $('#hcdialogBody').find('.feedback-items-list').eq(0).find('div');
            btnObj.unbind("click").click(function () {
                _myCorrectClick(arrDivObj, dragIndex);
            }); //纠错中的纠正选项按钮

            var wrongItemsArr = $('#hcdialogBody').find('li');  //纠错内容范围数组
            for (var i = 0; i < wrongItemsArr.length; i++) {
                wrongItemsArr.eq(i).attr('id', wrongItemsArr.eq(i).attr('id') + '-dialog');
                wrongItemsArr.eq(i).unbind("click").click(function () { //设置纠错选项勾选单击事件
                    var subID = $(this).attr('id');
                    if ($(this).attr('class') === 'checkBg') {
                        $(this).attr('class','checkedBg');
                        $('#feedback_btn').css({'background':'#6ca7ee','color':'#fff'});
                    } else if ($(this).attr('class') === 'checkedBg') {
                        $(this).attr('class','checkBg');
                    }
                });
            }
            var valueLen = 0;
            var feedContent = '';
            var curTest = _gAllTest.getCurTest();
            var textareaTagObj = $('#hcdialogBody').find('textarea').eq(0);
            var feedback = _gAllTest.getUserFeedback(_gAllTest.getCurIndex());  //从本地缓存获取用户之前输入的纠错信息
            if (_isEmpty(feedback)) {   //如果本地没有用的纠错信息，则请求接口获取纠错信息
                _gAllTest.getFeedbackWrong(curTest, infosArr['appID'], infosArr['userID'], _setFeedbackValue);
            } else {
                _setFeedbackValue(feedback);
            }
            function _setFeedbackValue(feedback) {  //回调函数：异步从接口获取数据展示
                if (!_isEmpty(feedback)) {
                    if(feedback.FeedbackContent){
                        textareaTagObj.val(feedback.FeedbackContent.replace(new RegExp('\\[br\\]', 'gm'), '\n'));//赋值显示之前的纠错反馈内容
                    }
                    valueLen = textareaTagObj.val().length;
                    $('#feedback_inputCount').html(valueLen);
                    if (valueLen >= 1) {
                        $('#feedback_btn').css('background','#6ca7ee;color:#fff;');
                    }
                    if (feedback.ErrorType) {
                        wrongItems = feedback.ErrorType.split(',');
                    }
                    for (var i = 0; i < wrongItems.length; i++) {
                        for (var j = 0; j < wrongItemsArr.length; j++) {
                            if (wrongItemsArr[j].attr('id').split('-')[1] === wrongItems[i]) {//将之前选中的纠错类型标记蓝色
                                wrongItemsArr[j].css('color','#4093DA');
                                wrongItemsArr[j].attr('class','checkedBg');
                                $('#feedback_btn').css({'background':'#6ca7ee','color':'#fff'});
                            }
                        }
                    }
                }
            }

            textareaTagObj.keyup(function () {
                if ($(this).val() === '') {
                    $('#feedback_btn').css('background','#ccc');
                    $('#feedback_inputCount').html('0');
                }
                feedContent = $.trim(textareaTagObj.val());
                valueLen = feedContent.length;
                if (valueLen >= 1) {    //文本域中输入值时，触发提交按钮
                    $('#feedback_inputCount').html(valueLen);
                    if (valueLen === 500) {
                        $('#msg-feedback').html('你输入的内容已达到限制，请重新编辑');
                    }
                    $('#feedback_btn').css({'background':'#6ca7ee','color':'#fff'});
                }
            });
            $('#feedback_btn').unbind("click").click(function () {
                G_UserAction.addUserAction('addFeedbackWrongBtn');
                var items = '';
                for (var i = 0; i < wrongItemsArr.length; i++) {
                    if (wrongItemsArr.eq(i).attr('class') === 'checkedBg') {
                        items +=  wrongItemsArr.eq(i).attr('id').split('-')[1] + ',';
                    }
                }
                items = items.substring(0, items.length - 1);
                //var content = textareaTagObj.value.replace(/(^\s*)|(\s*$)/g, "");
                if (!items && !feedContent) {
                    $('#msg-feedback').html('请输入您要反馈的详细内容或者选择反馈项！');
                    return;
                }
                feedContent = feedContent.replace(/(^\s*)|(\s*$)/g, "");
                feedContent = feedContent.replace(_regerN, '[br]');
                _gAllTest.setUserFeedback({'FeedbackContent': feedContent, 'ErrorType': items});
                if (feedContent) {
                    _gAllTest.setDiscussionContext(curTest, 1, feedContent, infosArr['appID']);
                }
                _gAllTest.setFeedbackWrong(curTest, items, feedContent, infosArr['appID'], infosArr['userID']);
                //_showDiscussBtn(curTest, 0, _gFlipsnap.currentPoint); //设置讨论内容的显示
                G_Prg.popMsg('谢谢您的反馈！');
                G_DialogContent.dispose();
            });
        }

        /********************************************************************************
         函数名：_addUserTestInfos
         功能：将输入的用户求助、用户解析、用户笔记、讨论回复信息等内容保存到数据库
         输入参数:infoFlag 信息标记：note 笔记、userExplain 用户解析、seekHelp 求助、discuss 讨论,infoTitle 弹窗信息标题,
         infoType 信息类型:纠错,求助,普通信息,1:纠错,2:求助,3:普通信息,replyToID 回复的讨论ID
         返回值：无
         创建信息：黎萍（2016-03-15）
         修改记录：黎萍（2016-03-17）添加控制：如果用户输入内容到一半就退出则将用户的信息缓存到本地，再次进入弹窗时从本地缓存读取展示信息
         黎萍（2016-04-07）修改：当清空输入框内的值时，按钮颜色变成灰色、已输入值统计重置为0
         黎萍（2016-05-16）修改：纠错成功，刷新讨论信息列表
         陶云（2016-05-18）修改：用户解析昵称，将用户名改为ks加用户ID，不显示用户手机号。
         审查人：无
         *******************************************************************************/
        function _addUserTestInfos(infoFlag, infoTitle, infoType, replyToID) {
            var infosArr = _checkInfos('yes');
            if (!infosArr) {
                return;
            }
            G_Prg.htmlContent('100%', '100%', '', '', true);//弹出窗口，把html移动到弹出框，动态添加
            $('#hcdialogBody').html(_userInfoHtml);
            $('#hcdvMsgBox').css('border-radius','0px');
            $('#hcdvMsgTitle').css('text-align','left');
            $('#hcdvMsgClose').hide();
            $('#hcdvMsgBackBtn').show();
            $('#hcdvMsgBackText').html(infoTitle);
            $('#hcdialogBody').css({'margin-top':'40px'});
            $('#hcdvMsgBackText').css({'float':'left'});
            $('#hcdialogBody').html(_userInfoHtml.replace('userInfo_btn', 'userInfo_btn2'));
            $('#userInfo_btn2').html('<div class="input_count"><span id="userInfo_inputCount">0</span>/500字</div><div class="feedback_msg" id="userInfo_msg"></div>');
            var content = '';
            var valueLen = 0;
            var curTestIndex = _gAllTest.getCurIndex();
            var curTest = _gAllTest.getCurTest();
            var textareaObj = $('#hcdialogBody').find('textarea').eq(0);

            switch (infoFlag) { //获取本地缓存的用户录入信息
                case 'note':
                    content = _gAllTest.getUserNote(curTestIndex);
                    if (content === '') {
                        content = curTest.userNote;
                    }
                    break;
                case 'userExplain':
                    if (_gAllTest.getUserExplain(curTestIndex)) {
                        content = _gAllTest.getUserExplain(curTestIndex).content;
                    }
                    $('#userInfo_btn2').html($('#userInfo_btn2').html()+'<div class="redcuing" id="redcuingExpBtn">还原为官方解析</div>');
                    break;
                case 'seekHelp':
                    content = _gAllTest.getUserSeekHelp(curTestIndex);
                    break;
                case 'addAnswer':
                    content = _gAllTest.getUserReply(curTestIndex);
                    break;
            }
            $('#userInfo_btn2').html($('#userInfo_btn2').html()+'<div class="feedback_btn" id="userInfo_submit">提交</div>');
            if ($('#redcuingExpBtn')) {
                $('#redcuingExpBtn').unbind("click").click(function () {
                    content = curTest.explain;
                    textareaObj.val(content.replace(new RegExp('\\[br\\]', 'gm'), '\n'));
                });
            }
            if (infoTitle === '添加讨论') {
                content = _gAllTest.getUserDiscuss(curTestIndex);
            }
            textareaObj.keyup(function () {
                if ($(this).val() == '') {
                    $('#userInfo_submit').css('background','#ccc');
                    $('#userInfo_inputCount').html('0');
                }
                content = textareaObj.val().replace(/(^\s*)|(\s*$)/g, "");
                valueLen = content.length;
                // content = $.trim(textareaObj.val());
                // valueLen = content.length;
                if (valueLen >= 1) {    //文本域中输入值时，触发提交按钮
                    $('#userInfo_inputCount').html(valueLen);
                    if (valueLen === 500) {
                        $('#userInfo_msg').html('你输入的内容已达到限制，请重新编辑');
                    }
                    $('#userInfo_submit').css({'background':' #59a7f4','color':'#fff'});
                }
            });
            if (content) {
                textareaObj.val(content.replace(new RegExp('\\[br\\]', 'gm'), '\n'));
                valueLen = content.length;
            }
            $('#userInfo_inputCount').html(valueLen);
            if (valueLen >= 1) {
                $('#userInfo_submit').css({'background':'#59a7f4','color':'#fff'});
            }
            $('#hcdvMsgBackBtn').unbind('click').click(function () {
                if (content) {
                    if (content.length >= 1) {
                        switch (infoFlag) { //将用户录入的信息缓存到本地
                            case 'note':
                                _gAllTest.setUserNote(content);
                                break;
                            case 'userExplain':
                                if (content === '无') {
                                    content = '';
                                }
                                _gAllTest.setUserExplain({
                                    content: content,
                                    updateTime: G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd'),
                                    //userName: G_Cookie.getUserName()
                                    nickName: G_Prg.getCookie('NICKNAME', true)
                                });
                                break;
                            case 'seekHelp':
                                _gAllTest.setUserSeekHelp(content);
                                break;
                            case 'addAnswer':
                                _gAllTest.setUserReply(content);
                                break;
                        }
                        ;
                        if (infoTitle === '添加讨论') {
                            _gAllTest.setUserDiscuss(content);
                        }
                    }
                }
                G_DialogContent.dispose();
            });
            $('#userInfo_submit').unbind("click").click(function () {
                //content = textareaObj.value.replace(/(^\s*)|(\s*$)/g, "");
                if (!content) {
                    $('#userInfo_msg').html('请输入详细内容！');
                    return;
                }
                // console.log(content);
                content = $('#hcdialogBody').find('textarea').eq(0).val().replace(/(^\s*)|(\s*$)/g, "");
                content = content.replace(_regerN, '[br]');
                G_DialogContent.dispose();
                //infoFlag 信息标记：note 笔记、userExplain 用户解析、seekHelp 求助、discuss 讨论信息
                if (infoFlag === 'note') {
                    _gAllTest.setUserNote(content);
                    _gAllTest.setMyNote(curTest, content, infosArr['appID'], infosArr['userID'], infosArr['userName']);
                    _refreshNoteIcon();
                    _showCurTest(curTest, _gFlipsnap.currentPoint);
                } else if (infoFlag === 'userExplain') {
                    var temp = content;
                    if (content === '无') {
                        temp = '';
                    }
                    _gAllTest.setUserExplain({
                        content: temp,
                        updateTime: G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd'),
                        //userName: G_Cookie.getUserName()
                        nickName: G_Prg.getCookie('NICKNAME', true)
                    });
                    _gAllTest.setUserTestExplain(curTest, content, infosArr['appID']);
                    _showCurTest(curTest, _gFlipsnap.currentPoint);
                } else if (infoFlag === 'seekHelp' || infoFlag === 'discuss') {
                    if (infoFlag === 'seekHelp') {
                        _gAllTest.setUserSeekHelp(content);
                    }
                    if (infoTitle === '添加讨论') {
                        _gAllTest.setUserDiscuss(content);
                    }
                    _gAllTest.setDiscussionContext(curTest, infoType, content, infosArr['appID'], replyToID);
                    _showDiscussInfo(0,curTest, _gFlipsnap.currentPoint,2); //显示讨论按钮
                } else if (infoFlag === 'addAnswer') {  //简答题、填空题提交用户输入的答案
                    _IsHandle = 1;  //标记是否进行了试题的相关操作
                    _gAllTest.setUserReply(content);
                    _seeJDTestAnswer(curTest, content);
                    if (_fromUrl !== 'mockExam') {   //模拟考场不显示讨论信息
                        _showDiscussBtn(curTest, 0, _gFlipsnap.currentPoint);   //设置讨论内容的显示
                    }
                    _showCurTest(curTest, _gFlipsnap.currentPoint);
                }
            });
        }

        /********************************************************************************
         函数名：_setDiscussionAgree
         功能：记录点赞讨论信息，再次点击则为取消点赞信息
         输入参数:discussion 要点赞的讨论信息，tagID 讨论内容所在的标签id
         返回值：无
         创建信息：黎萍（2016-03-18）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _setDiscussionAgree(discussion, tagID, index, discussionCount, dragIndex) {
            var discussionID = discussion.split('_')[0];
            var userID = discussion.split('_')[1];
            if (userID === G_Cookie.getUserID()) {  //用户不能对自己发表的内容进行点赞
                return;
            }
            var imgObj = $("#"+tagID.split('agree')[0] + 'agree_img_' + index + '_' + discussionCount + '_' + dragIndex);//hot_agree_img_0_40_1 点赞手型图片id
            var agreeCount = $("#"+tagID.split('agree')[0] + 'agree_count_' + index + '_' + discussionCount + '_' + dragIndex);//hot_agree_count_0_40_1 点赞数量
            var isCommended = 0;
            if (imgObj.attr('src').indexOf('agree_not.png') >= 0) {
                imgObj.attr('src','/images/ans/agree.png');
                isCommended = 1;
                agreeCount.html(Number(agreeCount.html()) + 1);
            } else {
                imgObj.attr('src','/images/ans/agree_not.png');
                agreeCount.html(Number(agreeCount.html()) - 1);
            }
            _gAllTest.setDiscussionAgree(discussionID, isCommended)
        }

        /********************************************************************************
         函数名：_discussionClick
         功能：回复讨论信息，点击一条讨论信息，弹窗框输入回复内容
         输入参数:discussFlag 讨论标记：add 添加讨论、reply 回复讨论,replyToID 回复的讨论内容id
         返回值：无
         创建信息：黎萍（2016-03-16）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _discussionClick(discussFlag, replyToID) {
            if (discussFlag === 'add') {
                _addUserTestInfos('discuss', '添加讨论', 3);
            } else if (discussFlag === 'reply') {
                _addUserTestInfos('discuss', '回复讨论', 3, replyToID);
            }
        }

        /********************************************************************************
         函数名：_seekHelpClick
         功能：求助点击事件，将用户输入的求助内容保存到数据库
         输入参数:无
         返回值：无
         创建信息：黎萍（2016-03-03）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _seekHelpClick() {
            _addUserTestInfos('seekHelp', '添加求助', 2);
        }

        /********************************************************************************
         函数名：_myExplainClick
         功能：用户解析添加按钮单击事件
         输入参数:无
         返回值：无
         创建信息：黎萍（2016-03-14）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _myExplainClick() {
            _addUserTestInfos('userExplain', '添加用户解析');
        }

        /********************************************************************************
         函数名：_myNoteClick
         功能：用户尚未添加有笔记时，笔记按钮的点击事件
         输入参数:无
         返回值：无
         创建信息：黎萍（2016-03-15）
         修改记录：黎萍（2016-03-31）保存笔记添加时间
         审查人：无
         *******************************************************************************/
        function _myNoteClick() {
            _addUserTestInfos('note', '添加笔记');
            _gAllTest.setTime(G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd'));
        }

        /********************************************************************************
         功能：用户添加笔记之后，笔记按钮的点击事件
         输入参数:无
         返回值：无
         创建信息：黎萍（2016-06-21）
         修改记录：无
         *******************************************************************************/
        function _updateNoteClick(dragIndex) {
            _addUserTestInfos('note', '修改笔记');
            _gAllTest.setTime(G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd'));
        }

        /********************************************************************************
         函数名：_myCorrectClick()
         功能：我要纠正添加按钮单击事件
         输入参数:无
         返回值：无
         创建信息：陶云（2016-03-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _myCorrectClick(arrDivObj, dragIndex) {  //tao
            var curTest = _gAllTest.getCurTest();
            var infosArr = _checkInfos('yes');
            if (!infosArr) {
                return;
            }
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var flag = 1;//默认为单选题
            if (testType === 'XTEST' || subTestType === '不定项' || subTestType === '多项') {
                flag = 2;
            } else if (testType === 'ATEST' || testType === 'PDTEST' || subTestType === '单项') {
                flag = 1;
            }
            _onloadCorrect(curTest, flag, arrDivObj, dragIndex);//显示纠正选择层
            arrDivObj.eq(0).show();
        }

        /********************************************************************************
         函数名：_onloadCorrect
         功能：弹出纠正选择窗
         输入参数:curTest:当前试题 type：选择题类型：多选为2/单选为1
         返回值：无
         创建信息：陶云（2016-03-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _onloadCorrect(curTest, type, arrDivObj, dragIndex) {
            //弹出纠答案页面
            //动态加载li标签
            var testType = curTest.testType; //试题类型
            var subTestType = curTest.subTestType; //针对A3和B题型的小题的试题类型进行定义
            var answer = curTest.answer;
            var selectedItems = curTest.selectedItems;
            var itemsLength = selectedItems.length;
            var curIndex = _getDragIndexByTestIndex();//获取当前滑动页索引
            var answerDivObj = arrDivObj.eq(0).find('ul').eq(0);
            answerDivObj.html('');//清空上一次的显示，重新显示纠正的答案
            var correctValue = '';
            for (var i = 0; i < itemsLength; i++) {
                var tagCls = $('<li></li>');
                if (testType !== 'PDTEST') {    //如果是选择题
                    correctValue = String.fromCharCode(65 + i);
                    tagCls.html(correctValue);  //输出答案
                    if ((testType === 'ATEST' || subTestType === '单项') && correctValue === answer) {//如果是单选题，需要去除正确答案
                        tagCls.css('display','none');
                    }
                } else {//如果是判断题，需要去除正确答案
                    correctValue = $('#pd_radio_items_' + i + '_' + curIndex).attr('lang');//获取判断题的选项
                    tagCls.html(correctValue);  //输出对应的对错
                    if (correctValue === answer) {  //如果等于参考答案，则不显示
                        tagCls.css('display','none');
                    }
                }
                tagCls.unbind("click").click(function (e) {//动态加载事件 选择答案 背景变色
                    e = e || window.event;
                    var target = e.srcElement || e.target;
                    var itemsArr = answerDivObj.find('li');
                    for (var i = 0; i < itemsArr.length; i++) {
                        //(多选题，不定项选择题，可以选择多项)
                        if (type === 2) {
                            // if (target == itemsArr.eq(i)) {
                            if ($(this).html() == itemsArr.eq(i).html()){
                                if (itemsArr.eq(i).attr('class') === 'feedback-items-selected') {
                                    itemsArr.eq(i).attr('class','');
                                } else {
                                    itemsArr.eq(i).attr('class','feedback-items-selected');
                                }
                            }
                        }
                        //(单选题，判断题,只能选择一项)
                        if (type === 1) {
                            // if (target == itemsArr.eq(i)) {
                            if ($(this).html() == itemsArr.eq(i).html()) {
                                itemsArr.eq(i).attr('class','feedback-items-selected');
                            } else {
                                itemsArr.eq(i).attr('class','');
                            }
                        }
                    }
                });
                answerDivObj.append(tagCls);
            }
            arrDivObj.eq(1).find('span').eq(1).unbind("click").click(function () {//纠正答案确定
                arrDivObj.eq(0).hide();
                _getCrrectAnswer(curTest, answerDivObj, dragIndex);
            });
            arrDivObj.eq(1).find('span').eq(0).unbind("click").click(function () {//纠正答案取消
                arrDivObj.eq(0).hide();
            });
        }

        /********************************************************************************
         函数名：_getCrrectAnswer()
         功能：获取用户修正的答案并显示到界面上,存储到服务器
         输入参数: curTest当前题目
         返回值：无
         创建信息：陶云（2016-03-23）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _getCrrectAnswer(curTest, answerDivObj, dragIndex) {
            var answerRcord = '';//用来记录用户选择答案；
            var itemsArr = answerDivObj.find('li');
            for (var i = 0; i < itemsArr.length; i++) {//遍历存储所选的答案
                if (itemsArr.eq(i).attr('class') === 'feedback-items-selected') {
                    answerRcord += itemsArr.eq(i).html();
                }
            }
            if (answerRcord) {//如果选择了答案
                _gAllTest.setUserCrrect(answerRcord);
                var infosArr = _checkInfos('yes');
                if (!infosArr) {
                    return;
                }
                $('#hcdialogBody').find('.feedback-items-btn').eq(0).html(answerRcord);
                _gAllTest.setCorrectionAnswer(curTest, answerRcord, infosArr['appID']);//保存改正的答案到数据库
            } else {
                G_Prg.popMsg('您未选择纠正的答案！');
            }
        }

        /********************************************************************************
         函数名：_setMyNote
         功能：连接到setUserNote接口，设置当前试题的笔记内容
         输入参数: appID 软件ID
         userID 用户ID
         curTest 当前试题
         note 笔记内容
         返回值：无
         创建信息：韦友爱（2014-07-15）
         修改记录：韦友爱（2014-07-16）添加调用_setNoteTestInfos()
         廖黎（2014-07-29） 将数据处理部分放入testData中，页面部分作为数据处理后的回调函数执行
         韦友爱（2014-09-18）调换添加笔记和显示他人笔记的执行顺序
         审查人：无
         *******************************************************************************/
        function _setMyNote(curTest, note, appID, userID, userName, guid) {
            _addNote[curTest.testNO - 1] = 1;
            window.scrollTo(0, document.body.scrollHeight + 40);

            if (note && note.length > 100) {
                note = note.substr(0, 100);
            }
            _gAllTest.setUserNote(note);
            _gAllTest.setTime(G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd'));
            setTimeout(function () {
                window.scrollTo(0, 0);
            }, 0);
            _gAllTest.setAction('addNote');
            _showCurTest(curTest, _gFlipsnap.currentPoint);
            _gAllTest.setMyNote(curTest, note, appID, userID, userName, guid);
            G_Prg.popMsg('保存成功');
            G_DialogContent.dispose();
        }

        /********************************************************************************
         函数名：_setCss
         功能：设置自定义样式
         输入参数: 无
         返回值: 无
         创建信息：谢建沅（2014-07-06）
         修改记录：无errorAnswer  rightAnswer
         韦友爱（2014-07-21）添加笔记、答案字体控制
         韦友爱（2014-08-04）添加字体行高控制
         审查人：无
         *******************************************************************************/
        function _setCss() {
            //设置自定义样式
            if (G_Cookie.getNightMode()) {
                _fontColor = 'nightItem';
            } else {
                _fontColor = 'defaultItem';
            }
            var fontSize = G_Cookie.getFontSize() || '18px';
            var bgColor = G_Cookie.getDayMode() || G_Cookie.getNightMode() || '#FFF';
            var fontColor = G_Cookie.getDFontColor() || G_Cookie.getNFontColor() || '#000';
            $('body').css({'font-size':fontSize,'background-color':bgColor,'color':fontColor});
            var newNumber = Number(fontSize.substring(0, fontSize.length - 2));
            if (newNumber > 23) {//行间距控制
                $('body').css('line-height','35px');
            } else {
                $('body').css('line-height','25px');
            }
            var tishu = $('.tishu');
            for (var i = 0; i < tishu.length; i++) {
                tishu.eq(i).css('color',fontColor);
            }
            var titleArr = $('.title_ans');
            var newFontSize = (newNumber + 2) + 'px';
            for (var i = 0; i < titleArr.length; i++) {
                if (newNumber > 23) {
                    titleArr.eq(i).css('line-height','40px');
                } else {
                    titleArr.eq(i).css('line-height','30px');
                }
                titleArr.eq(i).css('font-size',newFontSize);
            }
            var btnArr1 = $('.next_button_1');
            for (var i = 0; i < btnArr1.length; i++) {
                if (G_Cookie.getNightMode()) {
                    btnArr1[i].css('background-color','#4093DA');
                    btnArr1[i].css('color','#fff');
                } else {
                    btnArr1[i].style.backgroundColor = '#fff';
                    btnArr1[i].css('color','#000');
                }
            }
            var btnArr3 = $('.next_button_3');
            for (var i = 0; i < btnArr3.length; i++) {
                if (G_Cookie.getNightMode()) {
                    btnArr3[i].css('background-color','#4093DA');
                    btnArr3[i].css('color','#fff');
                } else {
                    btnArr3[i].style.backgroundColor = '#fff';
                    btnArr3[i].css('color','#000');
                }
            }
            var btnArr = $('.btn');
            for (var i = 0; i < btnArr.length; i++) {
                if (G_Cookie.getNightMode()) {
                    btnArr[i].css('background-color','#4093DA');
                    btnArr[i].css('color','#fff');
                } else {
                    btnArr[i].css('background-color','#fff');
                    btnArr[i].css('color','#000');
                }
            }

            var discussMoreArr = $('.discuss_more');//刷新按钮
            for (var i = 0; i < discussMoreArr.length; i++) {
                if (G_Cookie.getNightMode()) {
                    discussMoreArr.eq(i).css({'color':'#fff','background-color':'#4093DA','display':'none'});
                } else {
                    discussMoreArr.eq(i).css({'color':'#666','font-size':'16px','display':'none'});
                }

            }

            var refreshArr = $('.refresh');//刷新按钮
            for (var i = 0; i < refreshArr.length; i++) {
                if (G_Cookie.getNightMode()) {
                    //refreshArr[i].css('background-color','#4093DA');
                    refreshArr[i].css('color','#fff');
                } else {
                    //refreshArr[i].css('background-color','#fff');
                    refreshArr[i].css('color','#000');
                }
            }
            var refreshArr1 = $('.refresh1');//刷新按钮
            for (var i = 0; i < refreshArr1.length; i++) {
                if (G_Cookie.getNightMode()) {
                    //refreshArr[i].css('background-color','#4093DA');
                    refreshArr1[i].css('color','#fff');
                } else {
                    //refreshArr[i].css('background-color','#fff');
                    refreshArr1[i].css('color','#000');
                }
            }
            //如果是游客，手动设置默认是禁止使用播放音频的
            if (!G_Cookie.getUserID() && !G_Cookie.getOnMedia()) {
                G_Cookie.setOffMedia('off');
            }
        }

        /********************************************************************************
         函数名：_softSetting
         功能：软件设置初始化
         输入参数:无
         返回值：无
         创建信息：韦友爱（2014-07-17）
         修改记录：无
         审查人：无
         ********************************************************************************/
        function _softSetting() {
            if (G_Cookie.getOnMedia()) {
                _setMediaPlayer('on');
            } else {
                _setMediaPlayer('off');
                G_Cookie.setOffMedia('off');
                G_Cookie.removeOnMedia();
            }
            if (G_Cookie.getNightMode()) {
                setBgColor('night');
                $('#on').src = '/images/ans/on_night.png';
                $('#off').src = '/images/ans/off_night.png';
                $('#hcdvMsgBox').css('background', '#152d35');
                $('#flipTest1').css('background', '#152d35');
                $('#flipTest2').css('background', '#152d35');
                $('#flipTest3').css('background', '#152d35');
            } else {
                setBgColor('day');
                $('#on').src = '/images/ans/on_day.png';
                $('#off').src = '/images/ans/off_day.png';
                $('#hcdvMsgBox').css('background', '');
                $('#flipTest1').css('background', '#eef4f5');
                $('#flipTest2').css('background', '#eef4f5');
                $('#flipTest3').css('background', '#eef4f5');
            }
            if (G_Cookie.getOnMedia()) {
                _setMediaPlayer('on');
            } else {
                _setMediaPlayer('off');
            }
            var fontSize = G_Cookie.getFontSize() || '20px';
            $('body').css('font-size',fontSize);
            $('#minusSize').unbind("click").click(function () {
                G_UserAction.addUserAction('setFontBtn1');
                minusSizeClick2();
                _setCss();
            });
            $('#addSize').unbind("click").click(function () {
                G_UserAction.addUserAction('setFontBtn1');
                addSizeClick();
                _setCss();
            });
            $('#dayMode').unbind("click").click(function () {
                G_UserAction.addUserAction('setDayNightBtn1');
                setBgColor('day');
                $('#on').src = '/images/ans/on_day.png';
                $('#off').src = '/images/ans/off_day.png';
                $('#hcdvMsgBox').css('background','');

                $('#flipTest1').css('background','#eef4f5');
                $('#flipTest2').css('background','#eef4f5');
                $('#flipTest3').css('background','#eef4f5');
                var itemArr = $('.result_flag');
                for (var i = 0; i < itemArr.length; i++) {
                    itemArr.eq(i).css('color','#1B1A1A');
                }
                _setCss();
            }); //设置白天模式
            $('#nightMode').unbind("click").click(function () {
                G_UserAction.addUserAction('setDayNightBtn1');
                setBgColor('night');
                $('#on').src = '/images/ans/on_night.png';
                $('#off').src = '/images/ans/off_night.png';
                $('#hcdvMsgBox').css('background','#152d35');

                $('#flipTest1').css('background','#152d35');
                $('#flipTest2').css('background','#152d35');
                $('#flipTest3').css('background','#152d35');
                var itemArr = $('.result_flag');
                for (var i = 0; i < itemArr.length; i++) {
                    itemArr.eq(i).css('color','#666666');
                }
                _setCss();
            }); //设置夜间模式
            $('#onMedia').unbind("click").click(function () {
                var mode = '';
                if (G_Cookie.getNightMode()) {
                    mode = 'night';
                } else {
                    mode = 'day';
                }
                $('#offMedia').css('background','');
                $('#onMedia').css('background','#51A6EE');
                G_Cookie.setOnMedia('on');
                G_Cookie.removeOffMedia();
                setUserSetting(G_Cookie.getFontSize(), mode, 1);
                G_UserAction.addUserAction('setMediaOnBtn');
            }); //设置音效开模式
            $('#offMedia').unbind("click").click(function () {
                var mode = '';
                if (G_Cookie.getNightMode()) {
                    mode = 'night';
                } else {
                    mode = 'day';
                }
                $('#onMedia').css('background','');
                $('#offMedia').css('background','#51A6EE');
                G_Cookie.setOffMedia('off');
                G_Cookie.removeOnMedia();
                setUserSetting(G_Cookie.getFontSize(), mode, 0);
                G_UserAction.addUserAction('setMediaOffBtn');
            }); //设置音效关模式
        }

        /********************************************************************************
         函数名：_setMediaPlayer
         功能：答题音效的开关设置
         输入参数:flag 音效开关模式，取值有：开（on）、关（off）
         返回值：无
         创建信息：黎萍（2014-09-17）
         修改记录：无
         审查人：无
         ********************************************************************************/
        function _setMediaPlayer(flag) {
            switch (flag) {
                case 'on':
                    $('#offMedia').css('background','');
                    $('#onMedia').css('background','#51A6EE');
                    break;
                case 'off':
                    $('#onMedia').css('background','');
                    $('#offMedia').css('background','#51A6EE');
                    break;
            }
        }

        /********************************************************************************
         以下为滑动效果代码部分
         *******************************************************************************/
        /********************************************************************************
         函数名：_initFlipsnap
         功能：初始化滑动控件
         输入参数： flipsnap 滑动控件对象
         返回值：无
         创建信息：黎萍（2014-06-04）
         修改记录：无
         *******************************************************************************/
        function _initFlipsnap(flipsnap) {
            _gFlipsnap = flipsnap;
            _gFlipsnap = Flipsnap('.inner');
            //窗体尺寸变更事件，滑动控件重新自适应大小
            $(window).resize(function () {
                /*当横竖屏切换时，宽高度自适应屏幕*/
                var fliwidth = document.querySelector('body').offsetWidth;
                _gFlipsnap.distance = fliwidth;
                _gFlipsnap.refresh();
                _reflashDragControl(-1);
            });
            //监听滑动到最后一题时，如用户存在滑动行为，则弹出购买提示
            _gFlipsnap.element.addEventListener('fstouchmove', function (ev) {
                var startIndex = _gFlipsnap.currentPoint;
                var testCount = _gAllTest.getTestCount();  //试题总数
                var dragIndexByTestIndex = _getDragIndexByTestIndex();
                if ((startIndex === _gFlipsnap.currentPoint || _gFlipsnap.currentPoint === dragIndexByTestIndex)&&(_gAllTest.getCurIndex() + 1) === testCount) {
                    _gFlipsnap.disableTouch = false;
                    if (!_checkIsBuySoft() && (_gAllTest.getCurIndex() + 1) === testCount && _gFlipsnap.directionX === 1) {//directionX=1向左滑，directionX=-1向右滑
                        if (G_Prg.getQueryString('fromUrl') === 'myMessage') {
                            return;
                        }
                        _tipsBuySoft();
                        _reflashDragControl(-1);
                        return;
                    }
                }
             }, false);
            //滑动控件完成事件，重新绑定题目和更改当前题目索引
            _gFlipsnap.element.addEventListener('fstouchend',function (ev) {
                _gFlipsnap.disableTouch = true;
                //初始滑动页面索引，用来判断是否滑动切换成功
                var startIndex = _gFlipsnap.currentPoint;
                var testCount = _gAllTest.getTestCount();  //试题总数
                var dragIndexByTestIndex = _getDragIndexByTestIndex();
                setTimeout(function () {
                    var dragFlag = 0;   //滑动状态标识
                    //如果相等说明滑动前和滑动后索引相同，不做处理，返回
                    if (startIndex === _gFlipsnap.currentPoint || _gFlipsnap.currentPoint === dragIndexByTestIndex) {
                        _gFlipsnap.disableTouch = false;
                        return;
                    }

                    var flipFlag = '';  //用户行为统计标记
                    //从第一页翻到第二页，直接索引加1
                    if (_gFlipsnap.currentPoint === 1 && _gAllTest.getCurIndex() === 0) {
                        _gAllTest.moveNext();
                        //下一题
                        flipFlag = 'right';
                    } else if (_gFlipsnap.currentPoint === 1 && _gAllTest.getCurIndex() === (testCount - 1)) {//最后一页向前翻一页，直接索引减1
                        _gAllTest.movePre();
                        flipFlag = 'left';
                    } else {
                        //如果滑动释放的时候索引不是1，则需要重新更新3个滑动页面的HTML
                        if (_gFlipsnap.currentPoint !== 1) {
                            //上一题
                            if (_gFlipsnap.currentPoint === 0) {
                                //如果是第二题，则不需要重新绑定，直接切换到滑动页面0，否则需要重新绑定题目
                                if (_gAllTest.getCurIndex() !== 1) {
                                    if (_gAllTest.movePre()) {
                                        _init(1);
                                    }
                                    _gFlipsnap.moveToPoint(1, 0);//滑动到指定的层
                                    dragFlag = 1;

                                } else {
                                    _gAllTest.movePre();
                                    //背题模式下，隐藏其它非正确的选项
                                    var curTest = _gAllTest.getCurTest();
                                    if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {
                                        _hiddenTestSelects(curTest, 0);
                                    }
                                }
                                flipFlag = 'left';
                            }
                            //下一题
                            if (_gFlipsnap.currentPoint === 2) {
                                //如果是倒数第二题，则不需要重新绑定，直接切换到滑动页面2，否则需要重新绑定题目
                                if (_gAllTest.getCurIndex() !== testCount - 2) {
                                    if (_gAllTest.moveNext()) {
                                        _init(2);
                                    }
                                    _gFlipsnap.moveToPoint(1, 0);   //滑动到指定的层
                                    dragFlag = 2;
                                } else {
                                    _gAllTest.moveNext();
                                    //背题模式下，隐藏其它非正确的选项
                                    var curTest = _gAllTest.getCurTest();
                                    if (_gAllTest.getState(curTest.testNO - 1) === 'recite') {
                                        _hiddenTestSelects(curTest, 2);
                                    }
                                }
                                flipFlag = 'right';
                            }
                        }
                    }
                    if (flipFlag === 'left') {
                        _setReplyLookTime();
                        G_UserAction.addUserAction('flipPre');
                    } else if (flipFlag === 'right') {
                        _setReplyLookTime();
                        G_UserAction.addUserAction('flipNext');
                    }
                    _setFavTestInfos();//刷新底部收藏
                    _refreshNoteIcon();
                    //滚动到试题顶部
                    for (var i = 1; i < 4; i++) {
                        if ($('#flipTest' + i)) {
                            $('#flipTest' + i).scrollTop = 0;
                        }
                    }
                    _gFlipsnap.disableTouch = false;
                }, 350);    //setTimeout end
            }, false);
            _reflashDragControl(-1);    //刷新拖拽控件
        }

        /********************************************************************************
         函数名：_reflashDragControl
         功能：有滚动条出现的情况下修正滑动控件的滑动距离
         输入参数：index 当前展示的滑动层的索引
         返回值：无
         创建信息：谢建沅（2014-05-29）
         审查人：无
         *******************************************************************************/
        function _reflashDragControl(index) {
            var indexTemp = index;
            _gFlipsnap.distance = document.body.offsetWidth;
            if (indexTemp > -1) {
                _gFlipsnap.moveToPoint(indexTemp, 0);   //滑动到指定的层
            }
            _gFlipsnap.refresh();
        }

        /********************************************************************************
         函数名：_moveTestTemplet
         功能：移动试题模板
         输入参数：
         返回值：无
         创建信息：谢建沅（2014-05-29）
         修改记录：黎萍（2014-06-06）增加函数注释
         审查人：无
         *******************************************************************************/
        function _moveTestTemplet(allTestCount) {
            var html = '';
            if (_htmlTemplate.length > 0) {
                html = _htmlTemplate;
            } else {
                html = $("#exambt").html();
                $("#exambt").html("");
                _htmlTemplate = html;
            }
            var htmlArr = _replaceTempletId(html);
            //如果之前有残留，先清除
            for (var i = 1; i < 4; i++) {
                var _tempId = $('#flipTest' + i);
                if (_tempId) {
                    $('#innerdiv').find(_tempId).remove();
                }
            }
            var testCount = allTestCount < 3 ? allTestCount : 3;
            for (var i = 1; i <= testCount; i++) {
                var testDiv = $('<div></div>');
                testDiv.attr('id','flipTest' + i);
                $('#innerdiv').append(testDiv);
                //if(i!=2){
                var hightDiv = $('<div></div>');
                hightDiv.attr('class','flipDiv');
                $('#flipTest' + i).append(hightDiv);
                //}

                var contentDiv = $('<flipcontent' + i +'></flipcontent' + i + '>');
                contentDiv.attr('id','flipContent' + i);
                contentDiv.attr('class','flipContentDiv');
                contentDiv.html(htmlArr[i - 1]);
                $('#flipTest' + i).append(contentDiv);

                $('#flipTest' + i).append(hightDiv);
            }
        }

        /********************************************************************************
         函数名：_replaceTempletId
         功能：把试题模板的html标签的id替换掉
         输入参数：htmlTemplet 模板页面html；index 滑动模板div层的id
         返回值：新生成的临时变量html，起到中转层的作用
         创建信息：谢建沅（2014-05-29）
         修改记录：黎萍（2014-06-06）增加函数注释
         审查人：无
         *******************************************************************************/
        function _replaceTempletId(htmlTemplet) {
            var indexArr = [];  //id索引数组
            var currIndex = 0;      //当前试题索引
            //查找所有id的索引
            while (htmlTemplet.length > currIndex && htmlTemplet.indexOf("id=", currIndex) > -1) {
                var index = htmlTemplet.indexOf("id=", currIndex);
                indexArr.push(index + 4); //加一个引号的长度
                if (index < htmlTemplet.length) {
                    currIndex = index + 1;
                } else {
                    break;
                }
                if (htmlTemplet.indexOf("id=", currIndex) <= 0) {
                    currIndex = htmlTemplet.length;
                }
            }
            var htmlArr = [];
            //生成3个滑动层的Html代码
            for (var k = 0; k < 3; k++) {
                var newHtml;
                //循环处理ID
                for (var i = indexArr.length - 1; i >= 0; i--) {
                    var end = htmlTemplet.indexOf("\"", indexArr[i]);
                    //拼接最后一个ID的HTML
                    if (i === indexArr.length - 1) {
                        newHtml = htmlTemplet.substring(indexArr[i], end) + "_" + k + htmlTemplet.substring(indexArr[i] + (end - indexArr[i]), htmlTemplet.length);
                    } else if (i === 0) {//拼接第一个ID的HTML
                        newHtml = htmlTemplet.substring(0, indexArr[i]) + htmlTemplet.substring(indexArr[i], end) + "_" + k + htmlTemplet.substring(end, indexArr[i + 1]) + newHtml;
                    } else {//拼接其他ID的HTML
                        newHtml = htmlTemplet.substring(indexArr[i], end) + "_" + k + htmlTemplet.substring(end, indexArr[i + 1]) + newHtml;
                    }
                }
                htmlArr.push(newHtml);
            }
            return htmlArr;
        }

        /********************************************************************************
         函数名：_getDragIndexByTestIndex
         功能：获取当前滑动层的索引
         输入参数：无
         返回值：无
         创建信息：谢建沅（2014-08-21）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _getDragIndexByTestIndex() {
            var curTestIndex = _gAllTest.getCurIndex();
            var allTestCount = _gAllTest.getTestCount();
            var dragCount = allTestCount < 3 ? allTestCount : 3;
            if (curTestIndex === 0) {
                return 0;
            } else if (curTestIndex === allTestCount - 1) {
                return dragCount - 1;
            } else {
                return 1;
            }
        }
        /********************************************************************************
         函数名：_maiDianTestCount()
         功能：埋点答题统计
         输入参数：无
         返回值：无
         创建信息：陶云（2016-05-10）
         修改记录：无
         审查人：无
         *******************************************************************************/
        function _maiDianTestCount() {
            var locationName = '';
            switch (_fromUrl) {
                case 'chapterThree':
                {
                    locationName = '章节练习';
                    break;
                }
                case 'mockExam':
                {
                    locationName = '模拟考场';
                    break;
                }
                case 'searchExam':
                {
                    locationName = _title;
                    break;
                }
                case 'yhyc':
                {
                    locationName = '视频课程-易混易错';
                    break;
                }
                case 'video_play':
                {
                    locationName = '视频课程';
                    break;
                }
                case 'myMessage':
                {
                    locationName = '个人中心我的消息';
                    break;
                }
                case 'comb':
                {
                    locationName = '考点梳理';
                    break;
                }
                default:
                {
                }
            }
            var ChapterId = G_Cookie.getCptID();
            var beginTime = G_Prg.datetimeFormat(_replyStartTime, 'yyyy-MM-dd hh:mm:ss');
            var EndTime = G_Prg.datetimeFormat(new Date(), 'yyyy-MM-dd hh:mm:ss');
            var scoresjson = _gAllTest.calculateScores(); //接收分数的json数据
            var answerCount = scoresjson.doneNum;
            if (locationName) {
                // if (typeof(G_maiDian) !== 'undefined') {
                //     G_maiDian.s_answerClickCount(locationName, ChapterId, beginTime, EndTime, answerCount);
                // }
            }
        }
    }

    /********************************************************************************
     函数名：iOSreturn
     功能：苹果商店功能
     *******************************************************************************/
    function iOSreturn() {
        var username = G_Cookie.getUserID();
        var softname = G_Cookie.getAppEName();

        var answer = username + "/" + softname;
        return answer;
    }
    function _GetQueryString(name) {  
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");  
        var r = window.location.search.substr(1).match(reg);  //获取url中"?"符后的字符串并正则匹配
        var context = "";  
        if (r != null)  
             context = r[2];  
        reg = null;  
        r = null;  
        return context == null || context == "" || context == "undefined" ? "" : context;  
    }
});